|
78517
|
2758
|
3
|
2026-05-27T12:41:29.418045+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885689418_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78516
|
2757
|
2
|
2026-05-27T12:41:02.206887+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885662206_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78515
|
2758
|
2
|
2026-05-27T12:40:59.004951+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885659004_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78514
|
2757
|
1
|
2026-05-27T12:40:31.861494+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885631861_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78513
|
2758
|
1
|
2026-05-27T12:40:28.630216+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885628630_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78512
|
2758
|
0
|
2026-05-27T12:39:58.270947+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885598270_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78511
|
2757
|
0
|
2026-05-27T12:39:57.928273+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885597928_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78510
|
NULL
|
0
|
2026-05-27T12:39:27.881537+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885567881_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78509
|
NULL
|
0
|
2026-05-27T12:39:27.612543+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885567612_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78508
|
2756
|
11
|
2026-05-27T12:38:57.526144+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885537526_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78507
|
2755
|
13
|
2026-05-27T12:38:53.764456+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885533764_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78506
|
2756
|
10
|
2026-05-27T12:38:27.137260+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885507137_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78505
|
2755
|
12
|
2026-05-27T12:38:23.427268+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885503427_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78504
|
2756
|
9
|
2026-05-27T12:37:56.728754+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885476728_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78503
|
2755
|
11
|
2026-05-27T12:37:49.454677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885469454_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78502
|
2756
|
8
|
2026-05-27T12:37:26.353359+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885446353_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78501
|
2755
|
10
|
2026-05-27T12:37:19.100330+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885439100_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78499
|
NULL
|
NULL
|
NULL
|
|
78500
|
2756
|
7
|
2026-05-27T12:36:55.891517+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885415891_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78498
|
NULL
|
NULL
|
NULL
|
|
78499
|
2755
|
9
|
2026-05-27T12:36:33.534833+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885393534_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78498
|
2756
|
6
|
2026-05-27T12:36:25.526916+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885385526_m2.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","depth":4,"bounds":{"left":0.9644282,"top":0.07581804,"width":0.007978723,"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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"bounds":{"left":0.46077126,"top":0.0726257,"width":0.5275931,"height":0.9066241},"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78497
|
2755
|
8
|
2026-05-27T12:36:00.155879+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885360155_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"6","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-7631823762786779447
|
-5862347503831709301
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
6
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78496
|
NULL
|
NULL
|
NULL
|
|
78496
|
2755
|
7
|
2026-05-27T12:35:55.490405+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885355490_m1.jpg...
|
PhpStorm
|
faVsco.js – custom.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
Analyzing…
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"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":"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":"AXStaticText","text":"Analyzing…","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":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","depth":4,"on_screen":true,"value":"\"dealstage\": {\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"source\": \"CRM_UI\",\n \"sourceId\": \"userId:71523846\",\n \"updatedByUserId\": 71523846,\n \"versions\": [\n {\n \"name\": \"dealstage\",\n \"value\": \"closedlost\",\n \"timestamp\": 1778230152543, # 2026-05-08 08:49:12\n \"sourceId\": \"userId:71523846\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019e06c6-cd38-76f4-ae81-2d85ca04a72c\",\n \"updatedByUserId\": 71523846,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"InboundDbObjects-Service-web\"\n },\n {\n \"name\": \"dealstage\",\n \"value\": \"735341516\",\n \"timestamp\": 1773305812311, # 2026-03-12 08:56:52\n \"sourceId\": \"userId:76091797\",\n \"source\": \"CRM_UI\",\n \"sourceVid\": [],\n \"requestId\": \"019ce143-5502-7857-86c1-e4699e3d745d\",\n \"updatedByUserId\": 76091797,\n \"useTimestampAsPersistenceTimestamp\": true,\n \"sourceUpstreamDeployable\": \"CrmObjectBuilderRpcServer-userweb\"\n }\n ]\n},","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-8599193577290642275
|
-5857843887024469621
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Code changed:
Hide
Sync Changes
Hide This Notification
Analyzing…
Previous Highlighted Error
Next Highlighted Error
"dealstage": {
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"source": "CRM_UI",
"sourceId": "userId:71523846",
"updatedByUserId": 71523846,
"versions": [
{
"name": "dealstage",
"value": "closedlost",
"timestamp": 1778230152543, # 2026-05-08 08:49:12
"sourceId": "userId:71523846",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019e06c6-cd38-76f4-ae81-2d85ca04a72c",
"updatedByUserId": 71523846,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "InboundDbObjects-Service-web"
},
{
"name": "dealstage",
"value": "735341516",
"timestamp": 1773305812311, # 2026-03-12 08:56:52
"sourceId": "userId:76091797",
"source": "CRM_UI",
"sourceVid": [],
"requestId": "019ce143-5502-7857-86c1-e4699e3d745d",
"updatedByUserId": 76091797,
"useTimestampAsPersistenceTimestamp": true,
"sourceUpstreamDeployable": "CrmObjectBuilderRpcServer-userweb"
}
]
},
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78495
|
2756
|
5
|
2026-05-27T12:35:52.529791+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885352529_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5465425,"height":0.9074222},"on_screen":true,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
-6743698290635017155
|
-6438808257200486005
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78492
|
NULL
|
NULL
|
NULL
|
|
78494
|
2755
|
6
|
2026-05-27T12:35:52.322353+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885352322_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","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":"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}]...
|
-6743698290635017155
|
-6438808257200486005
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
78490
|
NULL
|
NULL
|
NULL
|
|
78493
|
2755
|
5
|
2026-05-27T12:35:29.245747+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885329245_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:37:25.474683Z\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4def257f-9b3d-4891-8f7f-3eed8f8f8140\",\"trace_id\":\"a29a382e-cdd0-4ff2-a487-dbecb527b8ed\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:37:25.474683Z\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3d5e68c4-ff4e-4b24-97e6-96d358ac75ea\",\"trace_id\":\"9b05781f-c5c9-4399-9d88-5b3784832962\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}\n[2026-05-27 12:35:25] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"02c7da60-8ba0-415c-8f55-8d8337c5e442\",\"trace_id\":\"adc13529-11a5-47f8-9bdf-1c940564c362\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78490
|
NULL
|
NULL
|
NULL
|
|
78492
|
2756
|
4
|
2026-05-27T12:35:23.619631+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885323619_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"edc012d3-53f5-46d6-866b-dbd8ed9ac236\",\"trace_id\":\"7781547b-04ba-4327-a862-0e36564a3064\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f4d8cff9-dda5-4a03-a932-0e8578466f6d\",\"trace_id\":\"32345780-1223-4bcc-b521-b56c0b808a7e\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring start {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:07] local.NOTICE: Monitoring end {\"correlation_id\":\"9999809e-6229-473c-bb91-a216ff609552\",\"trace_id\":\"e09f5fde-e059-4a3a-95cc-783eec8c9bf5\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"5308eb8f-c335-4acd-ab76-e76664e9b1d0\",\"trace_id\":\"14d58804-b44c-429d-a943-e087ca1fbb35\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e138fa51-d983-4b89-bbae-5cc0d11f8812\",\"trace_id\":\"4de0d8d6-8ea8-4f1b-82f1-9650ba2a8a99\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:purge-stale\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"bfb7044c-6c1a-4c89-bd14-f610010a998d\",\"trace_id\":\"35d5ba56-839c-41ee-b111-3e2abcf29aeb\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:13] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8e22e8a2-1d95-4941-b3c4-d00e24e33700\",\"trace_id\":\"24f2e8a8-fca0-4265-922f-41d6fab674fa\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b513d915-483a-4af9-a541-640baa9d2be0\",\"trace_id\":\"4ff2c640-41e1-4b1a-98e2-62023a1e2601\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:25:00, 2026-05-27 12:30:00] {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"c78f19e9-ef8f-415f-a2e4-ab1a1836f586\",\"trace_id\":\"acfb81db-90ac-43a6-a2c4-7d6aab10be74\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:30\",\"to\":\"12:35\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:25\",\"to\":\"02:30\"} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"d34ac188-43f9-4766-8f72-65e53383e581\",\"trace_id\":\"9efb445a-2ead-475b-8c6a-7eccc63d4deb\"}\n[2026-05-27 12:35:19] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:19] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:20] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] 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\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}\n[2026-05-27 12:35:21] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"71303e62-0c18-43f4-9793-4a4232419a7f\",\"trace_id\":\"60745855-6c1a-49ac-9bf3-9e03eb0c1511\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78491
|
2756
|
3
|
2026-05-27T12:34:48.513552+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885288513_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78488
|
NULL
|
NULL
|
NULL
|
|
78490
|
2755
|
4
|
2026-05-27T12:34:48.412948+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885288412_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78488
|
2756
|
2
|
2026-05-27T12:34:46.033552+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885286033_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-3862623192636985054
|
-6438808188481009269
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78489
|
2755
|
3
|
2026-05-27T12:34:45.854114+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885285854_m1.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Log Out
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Log Out","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.06944445,"height":0.024444444},"on_screen":false,"role_description":"text"}]...
|
-7121950181074423614
|
-2927473336241346073
|
visual_change
|
hybrid
|
NULL
|
Log Out
iTerm2ShellEditViewSessionScriptsProfilesW Log Out
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0100% <8• Wed 27 May 15:34:45DOCKER₴81DEV (docker)₴2-zsh883T1DOCKER (docker-compose)docker_lamp_1• '/usr/local/bin/php' 'artisan'mailbox:batch:process --max-batches=15 >'/proc/1/fd/1' 2>&1docker_lamp_12026-05-27 12:33:12 Running ['artisan'mailbox:batch:retry-failed --max-batches=15] in background3.42ms DONEdocker_lamp_1• ('/usr/local/bin/php' 'artisan' mailbox:batch:retry-faileds=15 > '/proc/1/fd/1' 2>&1 ; '/usr/local/bin/php' 'artisan'schedule: finish "framework/schedule-390defd641effba0f73a895e426ded4cf2ba7f11" "$?") ›'/dev/nul1' 2>81 &docker_lamp_12026-05-27 12:33:12 Running ['artisan'crm: autolog-delayed] Dispatched autologdelayed jobs for allapplicable teams:docker_lamp_1docker_lamp_1, '/usr/local/bin/php' 'artisan' crm:autolog-delayed > '/proc/1/fd/1' 2>&1docker_lamp_1docker_1amp_1run_artisan_schedule: Done waiting for schedule:rundocker_lamp_1docker_1amp_12026-05-27 12:34:03 Running ['artisan'meeting-bot:schedule-bot]... 4s DONEdocker_lamp_1 |t '/usr/local/bin/php' 'artisan'meeting-bot:schedule-bot> */proc/1/fd/1' 2>81docker_lamp_12026-05-27 12:34:08 Running ['artisan'dialers:monitor-activities]. 2s DONEdocker_lamp_11, '/usr/local/bin/php' 'artisan' dialers:monitor-activities > */proc/1/fd/1'2>&1docker_1amp_12026-05-27 12:34:10 Running ['artisan' jiminny:monitor-social-accounts]1sDONEdocker_lamp_1/1/fd/1'l '/usr/local/bin/php' 'artisan' jiminny:monitor-social-accounts › '/proc2>&1docker_lamp_12026-05-27 12:34:12 Running ['artisan' mailbox:skip-lists:refresh] . 1s DONEdocker_lamp_11 '/usr/local/bin/php' 'artisan'mailbox:skip-lists:refresh › */proc/1/fd/1' 2>81docker_lamp_12026-05-27 12:34:14 Running ['artisan' mailbox:batch:process --max-batcheS=15]1S DONEdocker_1amp_1• '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=15 ›'/proc/1/fd/1'2>&1docker_lamp_12026-05-27 12:34:16 Running ['artisan'conference:monitor:count]... 1s DONEdocker_lamp_1l '/usr/local/bin/php' 'artisan' conference:monitor:count > */proc/1/fd/12>&1docker_lamp_1docker_lamp_1run_artisan_schedule: Done waiting for schedule:runDOCKER (docker-compose)screenpipe"O ₴4-zsh85...ip-10-30-129-190:~ (nc)T2PROD (ssh)S[URL_WITH_CREDENTIALS] EU (-zsh)*** System restart required ***Last login: Tue May 26 06:32:33 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ client_loop: send disconnect: Broken pipe@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [|T4STAGE (ssh)Run 'do-release-upgrade' to upgrade to it.System restart required ***Last login: Mon May 18 06:46:53 2026 from 212.5.153.87stion:~$ |T5QA (-zsh)~ $ 0XT6FE (-zsh)lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ lPRODSTAGEFRONTENDEXT (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [EXTENSIONView in Docker Desktop@ View ConfigL View Logsw Enable Watchd Detach...
|
78486
|
NULL
|
NULL
|
NULL
|
|
78487
|
2756
|
1
|
2026-05-27T12:34:43.306463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885283306_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Log Out
Switch to Pre-Release
Quick Reference
Edit Log Out
Switch to Pre-Release
Quick Reference
Edit Keyboard Shortcuts
Windsurf Settings
Plan Info
Toggle Cascade
⇧⌘L
Windsurf...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Log Out","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Switch to Pre-Release","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Quick Reference","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit Keyboard Shortcuts","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Windsurf Settings","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Plan Info","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Toggle Cascade","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.03324468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘L","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.019946808,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Windsurf","depth":1,"bounds":{"left":0.93484044,"top":0.8036712,"width":0.061170213,"height":0.026336791},"on_screen":true,"role_description":"text"}]...
|
-2294243792281709736
|
-4588371687998746501
|
click
|
accessibility
|
NULL
|
Log Out
Switch to Pre-Release
Quick Reference
Edit Log Out
Switch to Pre-Release
Quick Reference
Edit Keyboard Shortcuts
Windsurf Settings
Plan Info
Toggle Cascade
⇧⌘L
Windsurf...
|
78484
|
NULL
|
NULL
|
NULL
|
|
78486
|
2755
|
2
|
2026-05-27T12:34:42.822623+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885282822_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"49e80f9b-847d-445c-8377-0d38dbfd43bd\",\"trace_id\":\"2c07c4ff-376b-4b22-afde-2acf6c040263\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"fe41b6fd-f0e2-4568-afd7-ce4d426fe35a\",\"trace_id\":\"799f2f93-5c6b-47ef-9bfd-4c7e296428aa\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring start {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:12] local.NOTICE: Monitoring end {\"correlation_id\":\"05a64f29-d16d-49f9-9db1-433ba8ad2c62\",\"trace_id\":\"f6ee9513-1745-41ed-8a3f-b56e2c5b292e\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:14] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"8dbc87ac-91ea-464c-9a4c-7e469c5422a7\",\"trace_id\":\"8af38c05-1722-472a-a6c9-f0850a9bd9ec\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:16] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b0f18397-1862-4d07-af9f-4a0f5cb43d84\",\"trace_id\":\"a79677bf-59d4-4bb2-816a-c11dec237b36\"}\n[2026-05-27 12:34:17] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:17] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:32:00, 2026-05-27 12:34:00] {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}\n[2026-05-27 12:34:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a11dd766-efdb-4994-b8f7-6480aeb13a45\",\"trace_id\":\"d1e88a97-202d-43dd-a43e-941442d0c2fe\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78485
|
2755
|
1
|
2026-05-27T12:34:38.749214+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885278749_m1.jpg...
|
Notes
|
TODO
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
20 May 2026 at 20:53
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"20 May 2026 at 20:53","depth":2,"on_screen":true,"automation_id":"_NS:7","help_text":"Perform press to show creation date.","role_description":"text"}]...
|
4289574448601599166
|
1663757087430496146
|
visual_change
|
hybrid
|
NULL
|
20 May 2026 at 20:53
iTerm2ShellEditViewSessionScr 20 May 2026 at 20:53
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0100% <8• Wed 27 May 15:34:38DOCKER (docker-compose)screenpipe"181DOCKER₴81DEV (docker)₴2-zsh883T1DOCKER (docker-compose)docker_lamp_1• '/usr/local/bin/php' 'artisan'mailbox:batch:process --max-batches=15 >'/proc/1/fd/1' 2>&1docker_lamp_12026-05-27 12:33:12 Running ['artisan'mailbox:batch:retry-failed --max-batches=15] in background3.42ms DONEdocker_lamp_1• ('/usr/local/bin/php' 'artisan' mailbox:batch:retry-faileds=15 > '/proc/1/fd/1' 2>&1 ; '/usr/local/bin/php' 'artisan'schedule: finish "framework/schedule-390defd641effba0f73a895e426ded4cf2ba7f11" "$?") ›'/dev/nul1' 2>81 &docker_lamp_12026-05-27 12:33:12 Running ['artisan'crm: autolog-delayed] Dispatched autologdelayed jobs for allapplicable teams:docker_lamp_1docker_lamp_1, '/usr/local/bin/php' 'artisan' crm:autolog-delayed > '/proc/1/fd/1' 2>&1docker_lamp_1docker_1amp_1run_artisan_schedule: Done waiting for schedule:rundocker_lamp_1docker_1amp_12026-05-27 12:34:03 Running ['artisan'meeting-bot:schedule-bot]... 4s Ddocker_lamp_1 |t '/usr/local/bin/php' 'artisan'meeting-bot:schedule-bot> */proc/1/fd/1docker_lamp_12026-05-27 12:34:08 Running ['artisan'dialers:monitor-activities]. 2s Ddocker_lamp_1, '/usr/local/bin/php' 'artisan' dialers:monitor-activities > */proc/1/fddocker_1amp_11sDONEdocker_lamp_1/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_1/1' 2>81docker_lamp_1S=15]1S DONEdocker_1amp_1'/proc/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_12>&1docker_lamp_1docker_lamp_12026-05-27 12:34:10 Running ['artisan' jiminny:monitor-social-accounts]l '/usr/local/bin/php' 'artisan' jiminny:monitor-social-accounts › '/proc2026-05-27 12:34:12 Running ['artisan' mailbox:skip-lists:refresh] . 1s D1 '/usr/local/bin/php' 'artisan'mailbox:skip-lists:refresh › */proc/1/fd2026-05-27 12:34:14 Running ['artisan' mailbox:batch:process --max-batche• '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=15 ›2026-05-27 12:34:16 Running ['artisan'conference:monitor:count]... 1s Dl '/usr/local/bin/php' 'artisan' conference:monitor:count > */proc/1/fd/1run_artisan_schedule: Done waiting for schedule:run-zsh85...ip-10-30-129-190:~ (nc)886...-10-30-140-255:~ (-zsh)$7T2PROD (ssh)S[URL_WITH_CREDENTIALS] EU (-zsh)*** System restart required ***Last login: Tue May 26 06:32:33 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ client_loop: send disconnect: Broken pipe@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [|T4STAGE (ssh)Run 'do-release-upgrade' to upgrade to it.System restart required ***Last login: Mon May 18 06:46:53 2026 from 212.5.153.87stion:~$ |T5QA (-zsh)~ $ 0XT6FE (-zsh)lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ lPRODSTAGEFRONTENDEXT (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [EXTENSIONView in Docker Desktop@ View ConfigL View Logsw Enable Watchd Detach...
|
78483
|
NULL
|
NULL
|
NULL
|
|
78484
|
2756
|
0
|
2026-05-27T12:34:37.450294+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885277450_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rnpstomViewNeWENNCCoocCaravelKetdcioWindowWed 27 M rnpstomViewNeWENNCCoocCaravelKetdcioWindowWed 27 May 15:34:37FV faVsco.|s ~$ JY-20915-fix-missing-header-text-rolaycomnoenr ieontexkehysсce.ohpphpljiminny.phpcustom.loglaravel.logconederelphplo005.8ppheo matl.criyPmoxo.ongPYlkowle"medd"sueamine.oneHwowercalonephp queue.phpsdlestorce.onesamconephp secure-headers.pho41410usonce wihny servcostwi16 @public function -_constructewpservices.ongScredentals = storage oathd pathetexterelay. 1sonppslack.ohecode: 4722phptimezones.ohgphp webhook-server.ohg> En contrit.→darabasNNNNNNoutenyd assianment'GOOGLE_APPLICATION_CREDENTIALS:" . Scredentials)(2826-85-27 12:30:21) local.INF0:Jiiinnyconsote leoonds teormand::run Memory usage before starting command {"connand":"aailbox: text-relay:sync", "memoryBeforeCommandInMb":68.8, "memoryPeakBeforeConnandInMb" : 912024-05-27 12:30:/20|ocaL.INFU,[TextRelayService) Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all", "expected_host":"txt.staging.jininny.com"} {"correlation_id":"6832826-85-27 12:30:221 local. INFOTextRelaySenvicoSyne._comoleted"mailbox":"catch-al19txt.staging.jiainny.com" "mossaons onocossed":0,"mossace.ids":0l "connolation Ad*:"68313124-1428-42ff-n6ff-1b536ma6f2826-85-27 12:30:221 local.INFOJininnylConsolelComandsl Conmandkanun Momony usage fon conmand "command*:"ma/lboxatoxtonolayasyne". "memonyBefoneCommandInMb":60.0"momonyAfitonComeandTnMB":69.А."пеnonyPoakBoolo-oseohKocdwruwnhycontoroAhoConahorun nmony usaoe oerone canenoandinMb":69.8. "menoryPeakBeforeCo12826-85-27 12:30:231 1ocal.INF0: Running pre-meeting notification conmand{"cornelation_id":*424bb6ce-aee2-4eed-8768-edSaed876beb" "trace_id":7f199754-5a58-4b2a-97d8-46186d949a85*}12826-85-27 12:30:231 1ocal, INF0wunhy Consoreoanos conanorun nemory usade ton connant.ahohwhchekores.eenochoe.ecac.coneaorvoerorodanoiehobhohoryAfterConnandinMB":62.0.":12826-85-27 12:30:251 1ocal, INF0wunhyConsreohosonnahohrunNy usade loeronecoemand {"connand":"conference:monitor:start" "nenoryßeforeComnandinMb":69.0, *nemoryPeakBeforeConnandTnMb" :(2826-85-27 12:30:251 1ocal,TNF0Running conference:moniton:start connand for activities in (2826-95-27 12:28:88.2826-85-27 12:25:801f"correlation_sid"."4e79a3c6-BaSe-4936-8389-64d5d764SaBS* "trace-id" -"Sd.(2826-85-27 12:30:251 1ocal,TNFO¡conference:monitor:start) No activities found in (2826-85-27 12:20:00. 2826-85-27 12:25:091f"correlatiion_id":"4e79a3c6-0a5e-4936-8389-64056764SaßS* "trace_id"-"Sdcb8a3d-1f(2826-85-27 12:30:251 1ocal,INF0hemory usage forconnand"command:conterence.sonttor.start"nenoryBeforecommandinho":o8.8nenorv.ttericandinMB":62,8. "nenoryPeakß(2826-85-27 12:30:271 1ocal, INF0Joinny consolelcoands (Connand::run Hemory usage beforeryPeakBeforeConnandinMb":997826-85-272:38:4locaiNFOsconfenencermonitonrendr.JininnwlConsollelCommandsMctvities\MonitonMeetsingEndConnandralonActelv/tlesEnded_fnon*-"12:25", "to"•*12A39*(concelation50*-*14ce8656-2a75-4002-91(2826-85-27 12:30:271 10ca1, INF0,-t0*-*92:25*} {"corcelatzion sid"-"14ce82826-85-272:38-44 Loca 3E0sJamAnnya Consol e Commands Conmandranun Nemony usage fon conmano commandue contenencernon tonrend»menonyBefoneconmandnio"noß.8memonyanenynaiinh8":02.8.nenory?eak&e"(2826-85-27 12:38:291 10Ca1 NOTIGE: Repaieing HubSoot tokens start("correlation_id":*acBec248-01e2-41e4-a22f-aebBa951866f*, "trace_id":"ffca4482-51e8-4ec4-84a1-811b18f68121*]2826-85-24 12338-29 10c910E05Trying to refresh HubSpot token 1"account_id":59, "updated_at":"2025-18-83 89:32:85} 1 correlation_1d":"acBeс248-81e2-41e4-a22f-aeb8a951860г*trace 1o":"440a4482-5 e8-uec4-%(2826-85-27 12-30:301 10ca1, TNFO,[EncryptedTokenManagen] Generating access token. {"mode":"Legacy"} {"correlation_1d*:*acĐec240-01e2-41e4-a22f-aeb8a951866f", "trace_1d*:*ffCa4482-51e8-4ec4-84a1-811b18f60121"}ẢỐ h*Sarch the tinteet mocenoae chaca thenner cuos(2826-85-27 12:38:381 Local.ERROR:Ihed to carrsch HnnSoos token Clsccouns lxco Hundatedeconnalas oncrlacherylroahrontcent>Elangnode modtles hhrary toon→tnanstant mualiid> @ resourcesv hroutesphe api.phpphe api_v2.phpne concole nbophe customer_api.phpMoamsioo0o.oneMo haalth obopublic function syncO: arraySmailbox = config( key. "jiminny.google_text_user'):SexpectedAlias = config( key: "jiminny-deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all'SexpectedHost = config( key: "jiminny.google-text_host'):(2826-85-21 12:30:381 Local.INFO:[EncryptedTokenManager) Generating access token. 1"mode#.SArohacodho8nhREAio%[Socia AccountService Refreshing token from provider "socialAccount.d":386 providen*: "hubspot", "refreshtoken":"6faбaa8сс641d131231acc3470f5c83cb3b87b2e588fb18f8acb3b2dbbY22826-85-21 12:30:311 Local.ERROR:edtorarrseh WunChot token dinecaunt.xe "undhtar• ¿aconnalation san.mneRor9/0-01DAOhORSOYDXARKNIACTMSTTryẳng to refresh HubSpot token "account_id":1372, "updated_at":"2025-18-82 14:47:86*) "correlation_id":"ac8ec248-0102-4104-a22f-aeb8a951866t*(2826-85-27 12:30:31) local.INFO:(EncryptedTokenManager) Generating access token. {"mode12A24-A0.27 12.20-711 Joonl YMSA.[SocialAccountService) Refreshing token from provider {"socialAccountId":1372, "provider":"hubspot" "refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d(2826-85-27 12:30:31] Zocal.ERROR: Failed to refresh HubSpot token {"account id":1372, "updated at"Log:: info( message: "(TextRelayService) Starting sync', "wennco jan.nttas1102.01o0.honh.0/s1-011h18660121m%"nazloox > Swarloox(2826-85-27 12:30:37) 2ocal.INFO:Jininny consolalonands\Connand::run Memory usage before startingmuoro celcoweo.onMaweb cnopp weonook.one> scriptev(ln storage> O apo>& debugbar> &a frameworkvMloasAAAAASAAAAULS'expected alias' =› SexpectedAlias.(2826-85-27 12:30:37) 2ocal.INFO:Jininny\Console\Commands\Connand::run Memory usage before startineecannandl.wjjninnv.trsncanintion.notru.fnilofl inonanиRoбanоблАлАТМЬ"-А.A #опАnирosиRofarоßorPXOPCIPONOSE L SOXOPCKPCHOST(2826-85-27 12:30:371 1ocal,TNFOJininny\ Consolel Connands) Connand::run Memory usage for cooryAfterConnandinMB":62,0."m1):(2826-85-27 12:30:371 1ocal, INFO[HubSpot ounnal Pol tineil Gettine offset fnom database "offset"-** "Sioinny tean Soa1l("connelation1d*:f64110de-h988-4649-8999-23ba7831d0c4% "toace Ad"-"efa59962-5164-41(2826-85-27 12:30:371 1ocal, TNF0HUO300Journal Connandil Starting polting servicef"corcelatiion_sid*."46411dde-6988-4649-8999-23ba7831ddc4* "trace_id"."efa59944-5144-4184-a168-761978c3eea8")seruces ensosreservetalook(2826-85-27 12:30:371 1oca1, TINF0HubSpotJournal PolLinall Service starting ("memory Tinit"."256M"(2826-85-27 12:30:371 10ca1,TNF01HUO3o0Journal PolTinal Acquired polting lock ("exoires at"."2826-85-27712:32-37.7231962*} ("cocnelatsion_1d*:"f6411dde-6988-4649-8999-236a7831ddc4* "trace_1d*:*efa599f4-51fessaoehsoransosoetsoresen(2826-85-27 12:30:371 10ca1, TNF0,fHubSpotJournal Poltinal Gettsing offset from database ("offset".** ""minny tean ia*:1} ("cornelatzion 1g":+6411dde-6988-4649-8999-236a7831ddc4* "trace 1d":*efa599f4-51f4-41ressaoeoss(2826-85-27 12:30:371 100a1, TNE0HUO3001(2826-85-27 12-30:371 10091, TNE0Jininnv| Consolel Connands) Connandearun MenonyforeachSnessaneksstony as Shistontes)(2826-85-27 12-30:371 10091, TNE0,Authl Requesting new client credentsials toke"coccelatzion 1a*.=46411dde-6988-4649-8999-23ba7831ddc4" "tcace 1d".*efa599f4-51f4-4184-9168-761978c3eea8")Snessages = Shistonies-snessagesAdded 22 11:(2826-85-27 12-30:381 100a1,TNE0,[2926-05-27 12-39-781 10041,1N50Journal Auth] Successfully obtained new access token ("expires_in":1880,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4™, "trace_id" :"efa59HubSoot Joucnsl Pol Sinall No detar{"concelatsion sd*:=f6411dde-6988-4649-8999-23667831ddc4" "tcace 3d":"efa59944-51f4-4184-0168-7b197803e098*)Foreach Snessades as Smessage)(2826-85-27 12-30:411 10091 INE0,reset-govennon" "nenoryßeforeCoenandInMb*:69.8."nenoryPeskBefoneConnandInMb" : 99,883)rcitionore(2826-85-27 12-39:441 100A1 TNEO,mand:arun Memony uenae fonansndTnMß":62.8."nenonyPeakBefored0 audio wav(2826-85-27 12-39:431 10091 TNEO,[HubSpot Journal Polling) Getting offset from database ("offset":** "jininny_tearncelatzion 4d*.=f6411dde-6988-4649-8999-23657831dd649_Bteace 5d"-*0fa599f4-51f4-41= custom logif (1 Sthis-sieforGuncentEnvironnent (Ssenyice, Snaflbox. Snessnoold. SexoectedAlias. SexoectodHost))g2826-85-22 12:30:43911oca1050lounnn-Apsetchinantestjournalentoy"urw.whttoesaot.hubhon.com/ne= nubspocioumal-poullod2826-85-22 12:30:4301 1oca1N=0[HubSpot Journal Polling) No data {"correlation_id":*f6411dde-b988-4b49-8999-23ba7831ddc4*wenkor.oo.2ar/slowswstwoowlCanealaressodellcarnsnd..mn Mosany ltendd hatonsandToMhl-LAA SnanonuDoslBofonoConnandTolhr,00 gpzl 1udcamnit xm:814020, "provider"FttieCnolnvortout Toytoolaveerhonalt cotaer lons nnausidond CsoceanotdrEoautheprivate ken*Akann #nnousdon"CANNOlAt on SA ANKNRERTROEICMLORAEECAITTKONNOAD SANSNO ANALYNSWEARKCHMOEfaoonnolntion Sdn.=49//14U10-9600-1601.0004.6/12116076048 840[PHONE]96612-1846-100Tho Huncnoll nhhmin hac hoon Honrocgtoh, Nươ t trố Mht Hớithhla Hịnghrnn, Whh Gan ca olu un ngtáil Hungholl wịnhhiừ gịMhNA THAPAMNNNEN AHAF IENAHnNOC. 10 m nitoG SAn...
|
NULL
|
-2634327989678894664
|
NULL
|
click
|
ocr
|
NULL
|
rnpstomViewNeWENNCCoocCaravelKetdcioWindowWed 27 M rnpstomViewNeWENNCCoocCaravelKetdcioWindowWed 27 May 15:34:37FV faVsco.|s ~$ JY-20915-fix-missing-header-text-rolaycomnoenr ieontexkehysсce.ohpphpljiminny.phpcustom.loglaravel.logconederelphplo005.8ppheo matl.criyPmoxo.ongPYlkowle"medd"sueamine.oneHwowercalonephp queue.phpsdlestorce.onesamconephp secure-headers.pho41410usonce wihny servcostwi16 @public function -_constructewpservices.ongScredentals = storage oathd pathetexterelay. 1sonppslack.ohecode: 4722phptimezones.ohgphp webhook-server.ohg> En contrit.→darabasNNNNNNoutenyd assianment'GOOGLE_APPLICATION_CREDENTIALS:" . Scredentials)(2826-85-27 12:30:21) local.INF0:Jiiinnyconsote leoonds teormand::run Memory usage before starting command {"connand":"aailbox: text-relay:sync", "memoryBeforeCommandInMb":68.8, "memoryPeakBeforeConnandInMb" : 912024-05-27 12:30:/20|ocaL.INFU,[TextRelayService) Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all", "expected_host":"txt.staging.jininny.com"} {"correlation_id":"6832826-85-27 12:30:221 local. INFOTextRelaySenvicoSyne._comoleted"mailbox":"catch-al19txt.staging.jiainny.com" "mossaons onocossed":0,"mossace.ids":0l "connolation Ad*:"68313124-1428-42ff-n6ff-1b536ma6f2826-85-27 12:30:221 local.INFOJininnylConsolelComandsl Conmandkanun Momony usage fon conmand "command*:"ma/lboxatoxtonolayasyne". "memonyBefoneCommandInMb":60.0"momonyAfitonComeandTnMB":69.А."пеnonyPoakBoolo-oseohKocdwruwnhycontoroAhoConahorun nmony usaoe oerone canenoandinMb":69.8. "menoryPeakBeforeCo12826-85-27 12:30:231 1ocal.INF0: Running pre-meeting notification conmand{"cornelation_id":*424bb6ce-aee2-4eed-8768-edSaed876beb" "trace_id":7f199754-5a58-4b2a-97d8-46186d949a85*}12826-85-27 12:30:231 1ocal, INF0wunhy Consoreoanos conanorun nemory usade ton connant.ahohwhchekores.eenochoe.ecac.coneaorvoerorodanoiehobhohoryAfterConnandinMB":62.0.":12826-85-27 12:30:251 1ocal, INF0wunhyConsreohosonnahohrunNy usade loeronecoemand {"connand":"conference:monitor:start" "nenoryßeforeComnandinMb":69.0, *nemoryPeakBeforeConnandTnMb" :(2826-85-27 12:30:251 1ocal,TNF0Running conference:moniton:start connand for activities in (2826-95-27 12:28:88.2826-85-27 12:25:801f"correlation_sid"."4e79a3c6-BaSe-4936-8389-64d5d764SaBS* "trace-id" -"Sd.(2826-85-27 12:30:251 1ocal,TNFO¡conference:monitor:start) No activities found in (2826-85-27 12:20:00. 2826-85-27 12:25:091f"correlatiion_id":"4e79a3c6-0a5e-4936-8389-64056764SaßS* "trace_id"-"Sdcb8a3d-1f(2826-85-27 12:30:251 1ocal,INF0hemory usage forconnand"command:conterence.sonttor.start"nenoryBeforecommandinho":o8.8nenorv.ttericandinMB":62,8. "nenoryPeakß(2826-85-27 12:30:271 1ocal, INF0Joinny consolelcoands (Connand::run Hemory usage beforeryPeakBeforeConnandinMb":997826-85-272:38:4locaiNFOsconfenencermonitonrendr.JininnwlConsollelCommandsMctvities\MonitonMeetsingEndConnandralonActelv/tlesEnded_fnon*-"12:25", "to"•*12A39*(concelation50*-*14ce8656-2a75-4002-91(2826-85-27 12:30:271 10ca1, INF0,-t0*-*92:25*} {"corcelatzion sid"-"14ce82826-85-272:38-44 Loca 3E0sJamAnnya Consol e Commands Conmandranun Nemony usage fon conmano commandue contenencernon tonrend»menonyBefoneconmandnio"noß.8memonyanenynaiinh8":02.8.nenory?eak&e"(2826-85-27 12:38:291 10Ca1 NOTIGE: Repaieing HubSoot tokens start("correlation_id":*acBec248-01e2-41e4-a22f-aebBa951866f*, "trace_id":"ffca4482-51e8-4ec4-84a1-811b18f68121*]2826-85-24 12338-29 10c910E05Trying to refresh HubSpot token 1"account_id":59, "updated_at":"2025-18-83 89:32:85} 1 correlation_1d":"acBeс248-81e2-41e4-a22f-aeb8a951860г*trace 1o":"440a4482-5 e8-uec4-%(2826-85-27 12-30:301 10ca1, TNFO,[EncryptedTokenManagen] Generating access token. {"mode":"Legacy"} {"correlation_1d*:*acĐec240-01e2-41e4-a22f-aeb8a951866f", "trace_1d*:*ffCa4482-51e8-4ec4-84a1-811b18f60121"}ẢỐ h*Sarch the tinteet mocenoae chaca thenner cuos(2826-85-27 12:38:381 Local.ERROR:Ihed to carrsch HnnSoos token Clsccouns lxco Hundatedeconnalas oncrlacherylroahrontcent>Elangnode modtles hhrary toon→tnanstant mualiid> @ resourcesv hroutesphe api.phpphe api_v2.phpne concole nbophe customer_api.phpMoamsioo0o.oneMo haalth obopublic function syncO: arraySmailbox = config( key. "jiminny.google_text_user'):SexpectedAlias = config( key: "jiminny-deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all'SexpectedHost = config( key: "jiminny.google-text_host'):(2826-85-21 12:30:381 Local.INFO:[EncryptedTokenManager) Generating access token. 1"mode#.SArohacodho8nhREAio%[Socia AccountService Refreshing token from provider "socialAccount.d":386 providen*: "hubspot", "refreshtoken":"6faбaa8сс641d131231acc3470f5c83cb3b87b2e588fb18f8acb3b2dbbY22826-85-21 12:30:311 Local.ERROR:edtorarrseh WunChot token dinecaunt.xe "undhtar• ¿aconnalation san.mneRor9/0-01DAOhORSOYDXARKNIACTMSTTryẳng to refresh HubSpot token "account_id":1372, "updated_at":"2025-18-82 14:47:86*) "correlation_id":"ac8ec248-0102-4104-a22f-aeb8a951866t*(2826-85-27 12:30:31) local.INFO:(EncryptedTokenManager) Generating access token. {"mode12A24-A0.27 12.20-711 Joonl YMSA.[SocialAccountService) Refreshing token from provider {"socialAccountId":1372, "provider":"hubspot" "refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d(2826-85-27 12:30:31] Zocal.ERROR: Failed to refresh HubSpot token {"account id":1372, "updated at"Log:: info( message: "(TextRelayService) Starting sync', "wennco jan.nttas1102.01o0.honh.0/s1-011h18660121m%"nazloox > Swarloox(2826-85-27 12:30:37) 2ocal.INFO:Jininny consolalonands\Connand::run Memory usage before startingmuoro celcoweo.onMaweb cnopp weonook.one> scriptev(ln storage> O apo>& debugbar> &a frameworkvMloasAAAAASAAAAULS'expected alias' =› SexpectedAlias.(2826-85-27 12:30:37) 2ocal.INFO:Jininny\Console\Commands\Connand::run Memory usage before startineecannandl.wjjninnv.trsncanintion.notru.fnilofl inonanиRoбanоблАлАТМЬ"-А.A #опАnирosиRofarоßorPXOPCIPONOSE L SOXOPCKPCHOST(2826-85-27 12:30:371 1ocal,TNFOJininny\ Consolel Connands) Connand::run Memory usage for cooryAfterConnandinMB":62,0."m1):(2826-85-27 12:30:371 1ocal, INFO[HubSpot ounnal Pol tineil Gettine offset fnom database "offset"-** "Sioinny tean Soa1l("connelation1d*:f64110de-h988-4649-8999-23ba7831d0c4% "toace Ad"-"efa59962-5164-41(2826-85-27 12:30:371 1ocal, TNF0HUO300Journal Connandil Starting polting servicef"corcelatiion_sid*."46411dde-6988-4649-8999-23ba7831ddc4* "trace_id"."efa59944-5144-4184-a168-761978c3eea8")seruces ensosreservetalook(2826-85-27 12:30:371 1oca1, TINF0HubSpotJournal PolLinall Service starting ("memory Tinit"."256M"(2826-85-27 12:30:371 10ca1,TNF01HUO3o0Journal PolTinal Acquired polting lock ("exoires at"."2826-85-27712:32-37.7231962*} ("cocnelatsion_1d*:"f6411dde-6988-4649-8999-236a7831ddc4* "trace_1d*:*efa599f4-51fessaoehsoransosoetsoresen(2826-85-27 12:30:371 10ca1, TNF0,fHubSpotJournal Poltinal Gettsing offset from database ("offset".** ""minny tean ia*:1} ("cornelatzion 1g":+6411dde-6988-4649-8999-236a7831ddc4* "trace 1d":*efa599f4-51f4-41ressaoeoss(2826-85-27 12:30:371 100a1, TNE0HUO3001(2826-85-27 12-30:371 10091, TNE0Jininnv| Consolel Connands) Connandearun MenonyforeachSnessaneksstony as Shistontes)(2826-85-27 12-30:371 10091, TNE0,Authl Requesting new client credentsials toke"coccelatzion 1a*.=46411dde-6988-4649-8999-23ba7831ddc4" "tcace 1d".*efa599f4-51f4-4184-9168-761978c3eea8")Snessages = Shistonies-snessagesAdded 22 11:(2826-85-27 12-30:381 100a1,TNE0,[2926-05-27 12-39-781 10041,1N50Journal Auth] Successfully obtained new access token ("expires_in":1880,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4™, "trace_id" :"efa59HubSoot Joucnsl Pol Sinall No detar{"concelatsion sd*:=f6411dde-6988-4649-8999-23667831ddc4" "tcace 3d":"efa59944-51f4-4184-0168-7b197803e098*)Foreach Snessades as Smessage)(2826-85-27 12-30:411 10091 INE0,reset-govennon" "nenoryßeforeCoenandInMb*:69.8."nenoryPeskBefoneConnandInMb" : 99,883)rcitionore(2826-85-27 12-39:441 100A1 TNEO,mand:arun Memony uenae fonansndTnMß":62.8."nenonyPeakBefored0 audio wav(2826-85-27 12-39:431 10091 TNEO,[HubSpot Journal Polling) Getting offset from database ("offset":** "jininny_tearncelatzion 4d*.=f6411dde-6988-4649-8999-23657831dd649_Bteace 5d"-*0fa599f4-51f4-41= custom logif (1 Sthis-sieforGuncentEnvironnent (Ssenyice, Snaflbox. Snessnoold. SexoectedAlias. SexoectodHost))g2826-85-22 12:30:43911oca1050lounnn-Apsetchinantestjournalentoy"urw.whttoesaot.hubhon.com/ne= nubspocioumal-poullod2826-85-22 12:30:4301 1oca1N=0[HubSpot Journal Polling) No data {"correlation_id":*f6411dde-b988-4b49-8999-23ba7831ddc4*wenkor.oo.2ar/slowswstwoowlCanealaressodellcarnsnd..mn Mosany ltendd hatonsandToMhl-LAA SnanonuDoslBofonoConnandTolhr,00 gpzl 1udcamnit xm:814020, "provider"FttieCnolnvortout Toytoolaveerhonalt cotaer lons nnausidond CsoceanotdrEoautheprivate ken*Akann #nnousdon"CANNOlAt on SA ANKNRERTROEICMLORAEECAITTKONNOAD SANSNO ANALYNSWEARKCHMOEfaoonnolntion Sdn.=49//14U10-9600-1601.0004.6/12116076048 840[PHONE]96612-1846-100Tho Huncnoll nhhmin hac hoon Honrocgtoh, Nươ t trố Mht Hớithhla Hịnghrnn, Whh Gan ca olu un ngtáil Hungholl wịnhhiừ gịMhNA THAPAMNNNEN AHAF IENAHnNOC. 10 m nitoG SAn...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78483
|
2755
|
0
|
2026-05-27T12:34:37.345989+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885277345_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0100% <78• Wed 27 May 15:34:37DOCKER (docker-compose)screenpipe"181DOCKER₴81DEV (docker)₴2-zsh883T1DOCKER (docker-compose)docker_lamp_1• '/usr/local/bin/php' 'artisan'mailbox:batch:process --max-batches=15 >'/proc/1/fd/1' 2>&1docker_lamp_12026-05-27 12:33:12 Running ['artisan'mailbox:batch:retry-failed --max-batches=15] in background3.42ms DONEdocker_lamp_1• ('/usr/local/bin/php' 'artisan' mailbox:batch:retry-faileds=15 > '/proc/1/fd/1' 2>&1 ; '/usr/local/bin/php' 'artisan'schedule: finish "framework/schedule-390defd641effba0f73a895e426ded4cf2ba7f11" "$?") ›'/dev/nul1' 2>81 &docker_lamp_12026-05-27 12:33:12 Running ['artisan'crm: autolog-delayed] Dispatched autologdelayed jobs for allapplicable teams:docker_lamp_1docker_lamp_1, '/usr/local/bin/php' 'artisan' crm:autolog-delayed > '/proc/1/fd/1' 2>&1docker_lamp_1docker_1amp_1run_artisan_schedule: Done waiting for schedule:rundocker_lamp_1docker_1amp_12026-05-27 12:34:03 Running ['artisan'meeting-bot:schedule-bot]... 4s Ddocker_lamp_1 |t '/usr/local/bin/php' 'artisan'meeting-bot:schedule-bot> */proc/1/fd/1docker_lamp_12026-05-27 12:34:08 Running ['artisan'dialers:monitor-activities]. 2s Ddocker_lamp_1, '/usr/local/bin/php' 'artisan' dialers:monitor-activities > */proc/1/fddocker_1amp_11sDONEdocker_lamp_1/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_1/1' 2>81docker_lamp_1S=15]1S DONEdocker_1amp_1'/proc/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_12>&1docker_lamp_1docker_lamp_12026-05-27 12:34:10 Running ['artisan' jiminny:monitor-social-accounts]l '/usr/local/bin/php' 'artisan' jiminny:monitor-social-accounts › '/proc2026-05-27 12:34:12 Running ['artisan' mailbox:skip-lists:refresh] . 1s D1 '/usr/local/bin/php' 'artisan'mailbox:skip-lists:refresh › */proc/1/fd2026-05-27 12:34:14 Running ['artisan' mailbox:batch:process --max-batche• '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=15 ›2026-05-27 12:34:16 Running ['artisan'conference:monitor:count]... 1s Dl '/usr/local/bin/php' 'artisan' conference:monitor:count > */proc/1/fd/1run_artisan_schedule: Done waiting for schedule:run84-zsh85...ip-10-30-129-190:~ (nc)T2PROD (ssh)S[URL_WITH_CREDENTIALS] EU (-zsh)*** System restart required ***Last login: Tue May 26 06:32:33 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ client_loop: send disconnect: Broken pipe@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [|T4STAGE (ssh)Run 'do-release-upgrade' to upgrade to it.System restart required ***Last login: Mon May 18 06:46:53 2026 from 212.5.153.87tion:~$ |T5QA (-zsh)XT6FE (-zsh)lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ lPRODSTAGEFRONTENDX 17EXT (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [EXTENSIONView in Docker Desktopo View ConfigL View Logsw Enable Watchd Detach...
|
NULL
|
-3522566340301862761
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0100% <78• Wed 27 May 15:34:37DOCKER (docker-compose)screenpipe"181DOCKER₴81DEV (docker)₴2-zsh883T1DOCKER (docker-compose)docker_lamp_1• '/usr/local/bin/php' 'artisan'mailbox:batch:process --max-batches=15 >'/proc/1/fd/1' 2>&1docker_lamp_12026-05-27 12:33:12 Running ['artisan'mailbox:batch:retry-failed --max-batches=15] in background3.42ms DONEdocker_lamp_1• ('/usr/local/bin/php' 'artisan' mailbox:batch:retry-faileds=15 > '/proc/1/fd/1' 2>&1 ; '/usr/local/bin/php' 'artisan'schedule: finish "framework/schedule-390defd641effba0f73a895e426ded4cf2ba7f11" "$?") ›'/dev/nul1' 2>81 &docker_lamp_12026-05-27 12:33:12 Running ['artisan'crm: autolog-delayed] Dispatched autologdelayed jobs for allapplicable teams:docker_lamp_1docker_lamp_1, '/usr/local/bin/php' 'artisan' crm:autolog-delayed > '/proc/1/fd/1' 2>&1docker_lamp_1docker_1amp_1run_artisan_schedule: Done waiting for schedule:rundocker_lamp_1docker_1amp_12026-05-27 12:34:03 Running ['artisan'meeting-bot:schedule-bot]... 4s Ddocker_lamp_1 |t '/usr/local/bin/php' 'artisan'meeting-bot:schedule-bot> */proc/1/fd/1docker_lamp_12026-05-27 12:34:08 Running ['artisan'dialers:monitor-activities]. 2s Ddocker_lamp_1, '/usr/local/bin/php' 'artisan' dialers:monitor-activities > */proc/1/fddocker_1amp_11sDONEdocker_lamp_1/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_1/1' 2>81docker_lamp_1S=15]1S DONEdocker_1amp_1'/proc/1/fd/1'2>&1docker_lamp_1ONEdocker_lamp_12>&1docker_lamp_1docker_lamp_12026-05-27 12:34:10 Running ['artisan' jiminny:monitor-social-accounts]l '/usr/local/bin/php' 'artisan' jiminny:monitor-social-accounts › '/proc2026-05-27 12:34:12 Running ['artisan' mailbox:skip-lists:refresh] . 1s D1 '/usr/local/bin/php' 'artisan'mailbox:skip-lists:refresh › */proc/1/fd2026-05-27 12:34:14 Running ['artisan' mailbox:batch:process --max-batche• '/usr/local/bin/php' 'artisan' mailbox:batch:process --max-batches=15 ›2026-05-27 12:34:16 Running ['artisan'conference:monitor:count]... 1s Dl '/usr/local/bin/php' 'artisan' conference:monitor:count > */proc/1/fd/1run_artisan_schedule: Done waiting for schedule:run84-zsh85...ip-10-30-129-190:~ (nc)T2PROD (ssh)S[URL_WITH_CREDENTIALS] EU (-zsh)*** System restart required ***Last login: Tue May 26 06:32:33 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ client_loop: send disconnect: Broken pipe@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [|T4STAGE (ssh)Run 'do-release-upgrade' to upgrade to it.System restart required ***Last login: Mon May 18 06:46:53 2026 from 212.5.153.87tion:~$ |T5QA (-zsh)XT6FE (-zsh)lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ lPRODSTAGEFRONTENDX 17EXT (-zsh)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ [EXTENSIONView in Docker Desktopo View ConfigL View Logsw Enable Watchd Detach...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78482
|
NULL
|
0
|
2026-05-27T12:34:10.102974+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885250102_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5581782,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78481
|
NULL
|
NULL
|
NULL
|
|
78481
|
2754
|
48
|
2026-05-27T12:34:08.010273+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885248010_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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}]...
|
-7228688528716742632
|
2609222811515291121
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
rnpstomViewNeWENNCCoocCaravelKetdcioookswincowFV faVsco.|s ~$ JY-20915-fix-missproidetphplo005.8ppheo matl.criyphe maxio.phpPYlkowle"medd"sueamine.oneHwowke earonephp queue.phpsdlestorce.onesamconephp secure-headers.phgwpservices.ohgppslack.ohephptimezones.ohgphp webhook-server.ohg› E contrito→darabasrontcent>Ulangnode modues hhrary roon→tnanstant mualiid> @ resourcesv hroutesphe api.phpphe api_v2.phpne concole nbophe customer_api.phpMoamsioo0o.oneMo haalth obomuoro celcoweo.onMaweb cnopp weonook.one> scriptev(ln storage> O apo>@ debugbar>& frameworkvMloasrcitionore0 audio wav= custom logcamnit xmFttieEoautheprivate kencomnoenr ieontexkehysсce.ohp©TextRelayServiceTest.phgphpljiminny.phphav otodietoeA1A10 .usonce wihny servcostwi16©public function -_constructeNNNNNNScredentals = storage oathd pathetexterelay. 1soncode: 4722putenv( assignment: 'G0OGLE_APPLICATION_CREDENTIALS:" • Scredentials)* Fetch the latest messages since the last sync.public function syncO: arraySmailbox = config( key. "jiminny.google_text_user'):SexpectedAlias = config( key: "jiminny-deploy_region') === 'eu" ? 'catch-all-eu' : 'catch-all'*SexpectedHost = config( key: "jiminny.google-text_host'):Log:: info( message: "(TextRelayService) Starting sync',""nazloox > Swarloox'expected alias' =› SexpectedAlias.PXOPCIPONOSE L SOXOPCKPCHOST1):serycee ens-weserytetalookssaoehstoryansosoertstoresenmressaoeossforeachSnessaneksstony as Shistontes)Snessages = Shistonies-snessagesAdded 22 (1:Foreach Snessades as Smessage)sthis-siesartunrentanwinonnentSsenwice.Smilbox.Sescaocid.SexocctedAsns.Sexoectechosocontoinue:Cnolnvortout= Toytoolsuesrhorolt cotmer loentl nnaunidond Csoceanoldnleserinetottho Euncoal nluain har bonn dnoonind. M vottm cat mutlon ln Huogndnn- yau ana cninozuninctall tungodl váth ant nitnglon thn iaiaondn lnc nth na inoaunooc 10 minutne noaWed 27 May 15:34:07custom.loglaravel.logconederel(2826-85-27 12:30:21) local.INF0:Jininny\Console\Commands\Connand::run Memory usage before starting command {*co2024-85-27 12-79:2111 Jo6a1 TMSn.[TextRelayService) Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all", "expected_host":"txt.staging.jiminny.com"} {"correlation_id":"68TextRelayService) Sync completed "mailbox":"catch-all9txt.staging.jiminny2826-85-27 12:30:221 local.INFO2826-85-27 12:30:221 local.INFO2826-85-27 12:30:231 local.INFO12826-85-27 12:30:231 1ocal, INFO(2826-85-27 12:30:231 1ocal, INF02826-85-27 12:30:251 1ocal,INFQJinannysconsote icontands icontond. .run nemory usage vor contond t ceunhy ConolCohoConahoron nomony usade oeroretore noe(2826-85-27 12:30:251 1ocal,INFQunhyConoeohCoahoun nomony usade toncry usage befonRunning conference:moniton:start connand for activities in (2826-95-27 12:28:08.ence:monitor:start) No activities found in (2826-85-27 12:20:00. 2826-85-27 12:25:091ryAfterConnandinMB":62.0."826-85-22738-25 oca iNFOs[2826-85-27 12:30:27) local.INFO;7826-85-42:3814oca INFOs(2826-85-27 12:30:271Joinny consolel cornands connand::run temory usage for connand"command conterence:sont ton:start""nenoryBerorecomands (Connand::run Hemory usage befoconterence:cont ton.end:sminny console commands actovites Hont torveer noendionnand: oo ct vi olesended fron 102:25","T0":"11146e8656-2875-40872912826-85-272:38-44oce NE0sJsminny console cormands connand::run Memory usage for command "command*conterence:sons tontend" "nemoryBeforeconmandinyo":68.8(2826-85-27 12:30:29 Local.NOTICE: Repatring HubSpot tokens startTayinolto nernesh:masooraokene laccoun a ся5я ПОса ес а148 204551::ШВВУЯ:5Н ЗИСОСО аТОл ССЫЯ аСВест248-В СУТ С4С024 2а00:895-В65АЛЫСаСАБ СЫТЫВ Са448225108-49043:[2826-85-27 12:38:381 Local.INFUierheiill nlocalleimisitLEncryptedTokenHanager, Generating access token. 1"modeSocs alr ccoudr Sanusca Rerrechs neuroken foom nnavsiden socsaln ccounttdearo Cocousden x"huheodn" "natnachilloker(2826-85-21 12:30:381 Local.ERROR:ioreiillnlocaitmisitaheatocaroaeh Hi.Soor token "sccouns lxco lund.lausine to carsseh Hi.Soot token eaccount "eh lunds(2826-85-21 12:30:381 Local.INFO:sncrvntscloxsslsosces Caenstthou scenee tathn CllnodhNae.necouds Camuea Cerrsehstne takhntaamunnausdon"SnAccomnanee0. ooniidos"huhenor" oanach nkon"onomneco,nnisibainca WinSatuchnirmns885h 18 8achh nhivu2826-85-21 12:30:31) Local.ERROREDehoRsoXArKNioenMstFailed to refresh HubSpot token "account_id":386, "updated_at"2824-85.27 12.70-7111 Noonl YMSA.ager) Generating access token. {"mode2824-85.27 12:20-711 Noonl YMSA.[SocialAccountService) Refreshing token from provider {"socialAccountId":1372, "provider":"hubspot" "refreshToken":"9aа73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d(2826-85-27 12:30:31) LocaL.ERROR: Failed to refresh HubSpot token "account id":1372, "updated at":*2025-18-02 14:47:86*, "reason":"missing on invalid refresh token", "previous":**) "connelation id*:"ac0ec240-TDEAA-AS-O12-RADRA MOOA N0T706. Ponatisina Hinh Goot. tokenc ondlECtotalloR HSiVOdHEA CTlOdEeTEBCoCcolAtsioaEHC.ChOleCh4AHA1C2EA1olenD0-nehAnOS186Kwtnnco jaw.nt6as4102.C1o0.honh.0/s1-011618640121k12854-86.27 12.70-291 Joan1 YMSA.12804.86.27 12.70-291 oan1 TMSA-Jininny\Console\Commands\Connand::run Memory usage before startingJininny\Console\Comnands\Connand::run Memory usage befor(2826-85-27 12:30:371 1ocal, TNFO(2826-85-27 12:30:371 1ocal,TNFO(2826-85-27 12:30:371 1ocal, TNFO(2826-85-27 12:30:371 1oca1, INFO(2826-85-27 12:30:371 10ca1,TNF0(2826-85-27 12:30:371 100a1,TNF0(2826-85-27 12-30:371 100a1, TNE0(2826-85-27 12-30:371 100a1, TNEO,(2826-85-27 12-30:371 10091, TNE0,(2826-85-27 12-30:381 10091,TNE0,onhwConsoeocnoscorahorrunnemorvusadetohorvAfterConnandinMB":62,0."mHubSpot Jounnal Pol Tingil Gettine offset fnom database "offset"-** "Sioinny tean io*a1l("connelation id*:f6411dde-b988-4649-8999-23ba7831ddc4% "tnace Ad"-"efa59964-5164-41ОІМО ТЕХТЕОВ ВСІМОТ•ШОО ЕОТО ШЕВМУАТОНВСОММ-КЕТФОТООЬНТКОВОН ПОУВЕСИФУРЗЗУРУАУВУООСИАТСС:ФОЖТZУMZ89206480998788144188Journal PolLingil Service starting ("menory Linit"."256M"nal Poltinal Gettaing offset from database ("offset"."*Auth Reques ino new cibient credentaus tokerNournal Authl Successfully obtained new access token ("exoires sin*:1800, "cached fon"-1589).01e4a59[PHONE]-8108-701978c3ees8"-5988-4649-8999-23697831d4dc4" "trace Sd"-"efa5912826-85-24 12130-38711009100E05(2826-05-27 12-30:411 1oca1, TNEO,Jouonsl Pol SinallNo datar"correlation 1d":f6ch.dde-0988-4040-8930-36673yddc4" "onace 10"."efa599f4-5f4-484-81h8-70198c3ees8пdІоь" : 99,8832826-85-24 12:30.4011oo01NE0nd:srun Memony ugnac for2826-85-21 12:30:433 local.INFO:2826-85-24 12:38:4301Loca10N=0Apieseechiind ntest slournalenteyu2826-85-27 12:30:43) local.INFO:Denkoesoe-ZArneremin Mosany mendd hotdnsenstchina natfvity cund doh fusanont sau.912000 "nnouwDoskBofonoCornandToMb=-00 gp7) (nnenkoese .Xerael tlonnmsneMenstehtnd satwty cund soh deusnont alshan "nnausd...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78480
|
NULL
|
0
|
2026-05-27T12:34:05.630711+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885245630_m1.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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":"TextRelayServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'TextRelayServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","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\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","depth":4,"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78478
|
NULL
|
NULL
|
NULL
|
|
78479
|
2754
|
47
|
2026-05-27T12:34:04.530818+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885244530_m2.jpg...
|
PhpStorm
|
faVsco.js – laravel.log
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
[{"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":"JY-20915-fix-missing-header-text-relay, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09740692,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20915-fix-missing-header-text-relay","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.8374335,"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":"TextRelayServiceTest","depth":6,"bounds":{"left":0.85272604,"top":0.019952115,"width":0.062832445,"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 'TextRelayServiceTest'","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 'TextRelayServiceTest'","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":"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":"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":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.40658244,"top":0.07581804,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":4,"bounds":{"left":0.41589096,"top":0.07581804,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42719415,"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.43450797,"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":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","depth":4,"bounds":{"left":0.12898937,"top":0.0726257,"width":0.31881648,"height":0.9273743},"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Mail;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Support\\Facades\\Log;\nuse Jiminny\\Component\\Queue\\Constants;\nuse Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\nuse Jiminny\\Models\\TextRelay;\nuse Google\\Service\\Gmail as GoogleGmail;\n\nclass TextRelayService\n{\n public function __construct()\n {\n $credentials = storage_path('text-relay.json');\n\n abort_unless(file_exists($credentials), 422);\n\n putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);\n }\n\n /**\n * Fetch the latest messages since the last sync.\n */\n public function sync(): array\n {\n $mailbox = config('jiminny.google_text_user');\n\n $expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';\n $expectedHost = config('jiminny.google_text_host');\n\n Log::info('[TextRelayService] Starting sync', [\n 'mailbox' => $mailbox,\n 'expected_alias' => $expectedAlias,\n 'expected_host' => $expectedHost,\n ]);\n\n $service = $this->getService($mailbox);\n\n $messageHistory = $this->getHistory($service);\n $messageIds = [];\n\n foreach ($messageHistory as $histories) {\n $messages = $histories->messagesAdded ?? [];\n\n foreach ($messages as $message) {\n $messageId = $message->message->id;\n\n if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {\n continue;\n }\n\n $relayedText = TextRelay::where('email_provider_id', $messageId)->first();\n\n if ($relayedText === null) {\n $relayedText = TextRelay::create([\n 'email_provider' => TextRelay::PROVIDER_GSUITE,\n 'email_provider_id' => $messageId,\n 'status' => TextRelay::STATUS_PROCESSING,\n ]);\n }\n\n $job = new EmailTextRelay($messageId, $relayedText);\n $job->onQueue(Constants::QUEUE_EMAILS);\n\n// dispatch($job);\n\n Log::info('[TextRelayService] Successfully dispatched message', [\n 'message_id' => $messageId,\n 'text_relay_id' => $relayedText->id,\n 'queue' => Constants::QUEUE_EMAILS,\n ]);\n\n $messageIds[] = $messageId;\n }\n }\n\n Log::info('[TextRelayService] Sync completed', [\n 'mailbox' => $mailbox,\n 'messages_processed' => count($messageIds),\n 'message_ids' => array_slice($messageIds, 0, 10),\n ]);\n\n return $messageIds;\n }\n\n public function getHistory(GoogleGmail $service): array\n {\n $pageToken = null;\n $topic = config('jiminny.google_text_relay_topic');\n $messages = [];\n $historyId = \\Cache::get($topic);\n\n // If we have no history stored, WatchMailboxEvents must not have run yet :/\n if ($historyId == false) {\n $historyId = $this->refreshHistoryPoint($topic);\n }\n\n $params = [\n 'historyTypes' => 'messageAdded',\n 'startHistoryId' => $historyId,\n ];\n\n do {\n try {\n if ($pageToken) {\n $params['pageToken'] = $pageToken;\n }\n\n $historyResponse = $service->users_history->listUsersHistory(\n config('jiminny.google_text_user'),\n $params\n );\n\n $this->setHistoryPoint($topic, (int) $historyResponse->historyId);\n\n if ($historyResponse->getHistory()) {\n $messages = array_merge($messages, $historyResponse->getHistory());\n $pageToken = $historyResponse->getNextPageToken();\n }\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to fetch Gmail history', [\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n } while ($pageToken);\n\n return $messages;\n }\n\n protected function setHistoryPoint(string $topic, int $historyPoint): Carbon\n {\n $expiresAt = now()->addDay();\n\n \\Cache::put($topic, $historyPoint, $expiresAt);\n\n return $expiresAt;\n }\n\n public function getService(string $mailbox): GoogleGmail\n {\n $client = new \\Google_Client();\n $client->useApplicationDefaultCredentials();\n $client->addScope(GoogleGmail::GMAIL_MODIFY);\n $client->setAccessType('offline');\n $client->setSubject($mailbox);\n\n return new GoogleGmail($client);\n }\n\n public function refreshHistoryPoint(string $topic): int\n {\n $mailbox = config('jiminny.google_text_user');\n $service = $this->getService($mailbox);\n\n $watchRequest = new GoogleGmail\\WatchRequest();\n $watchRequest->setLabelIds(['INBOX']);\n $watchRequest->setLabelFilterAction('include');\n $watchRequest->setTopicName($topic);\n\n $watchResponse = $service->users->watch($mailbox, $watchRequest);\n\n //$expiryTimestamp = $watchResponse->expiration / 1000;\n $historyPoint = (int) $watchResponse->historyId;\n\n $this->setHistoryPoint($topic, $historyPoint);\n\n return $historyPoint;\n }\n\n private function isForCurrentEnvironment(\n GoogleGmail $service,\n string $mailbox,\n string $messageId,\n string $expectedAlias,\n string $expectedHost\n ): bool {\n try {\n $message = $service->users_messages->get($mailbox, $messageId);\n $headers = $message->getPayload()->getHeaders();\n\n foreach ($headers as $header) {\n if ($header->name === 'X-Gm-Original-To') {\n $matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);\n\n if (! $matches) {\n // Sanitize PII by removing plus-tag content for logging\n $sanitizedOriginalTo = explode('+', $header->value)[0];\n Log::info('[TextRelayService] Refused message', [\n 'message_id' => $messageId,\n 'original_to_sanitized' => $sanitizedOriginalTo,\n ]);\n }\n\n return $matches;\n }\n }\n\n Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [\n 'message_id' => $messageId,\n ]);\n } catch (\\Exception $e) {\n Log::error('[TextRelayService] Failed to inspect message', [\n 'message_id' => $messageId,\n 'exception' => $e->getMessage(),\n ]);\n \\Sentry::captureException($e);\n }\n\n return false;\n }\n\n private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool\n {\n $parts = explode('@', $recipient, 2);\n\n if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {\n return false;\n }\n\n $localBase = explode('+', $parts[0], 2)[0];\n\n return strcasecmp($localBase, $expectedAlias) === 0;\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","depth":4,"bounds":{"left":0.4418218,"top":0.0726257,"width":0.5465425,"height":0.9273743},"on_screen":true,"value":"[2026-05-27 12:30:21] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"expected_alias\":\"catch-all\",\"expected_host\":\"txt.staging.jiminny.com\"} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {\"mailbox\":\"catch-all@txt.staging.jiminny.com\",\"messages_processed\":0,\"message_ids\":[]} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:22] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:text-relay:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"683a3124-a428-42ff-a6ff-1b536ea6f86f\",\"trace_id\":\"7000de07-5030-4494-93f2-d0459b6e1204\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:23] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-notification\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"424bb6ce-aee2-4eed-87b0-ed5aed876beb\",\"trace_id\":\"7f199754-5a58-4b2a-97d8-f6186d949a0b\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:start\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4e79a3c6-0a5e-4036-8389-64d5d7645a05\",\"trace_id\":\"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesEnded {\"from\":\"12:25\",\"to\":\"12:30\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\\Console\\Commands\\Activities\\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {\"from\":\"02:20\",\"to\":\"02:25\"} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:27] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:end\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"14ce0656-2a75-4d02-91a5-7a078855aa04\",\"trace_id\":\"36f491fa-e011-47cd-b39e-69dcf8580186\"}\n[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {\"account_id\":59,\"updated_at\":\"2025-10-03 09:32:05\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":59,\"provider\":\"hubspot\",\"refreshToken\":\"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {\"account_id\":306,\"updated_at\":\"2023-11-27 09:30:03\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":306,\"provider\":\"hubspot\",\"refreshToken\":\"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30: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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {\"account_id\":1372,\"updated_at\":\"2025-10-02 14:47:06\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1372,\"provider\":\"hubspot\",\"refreshToken\":\"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4\",\"state\":\"full-refresh\"} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] 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\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {\"total\":3,\"fixed\":0,\"failed\":3} {\"correlation_id\":\"ac0ec240-01e2-41e4-a22f-aeb0a951866f\",\"trace_id\":\"ffca4402-51e8-4ec4-84a1-811b18f60121\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:transcription:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"afa5ad5c-62b7-408d-99cf-87aab5b6f581\",\"trace_id\":\"9e8b5378-a093-49e1-989c-376d9d220091\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {\"memory_limit\":\"256M\",\"max_execution_time\":\"0\",\"initial_memory_mb\":62.0} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {\"expires_at\":\"2026-05-27T12:32:37.723196Z\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:37] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:pre-meeting-reminder\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"701de09e-db6e-4a53-a3de-d162a5ee7b68\",\"trace_id\":\"8536855c-4f04-4096-9597-497749ac44f9\"}\n[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {\"expires_in\":1800,\"cached_for\":1500} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:41] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:reset-governor\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"147210e4-76f9-4ecd-a5ec-940a0bb14823\",\"trace_id\":\"f6e91f2e-15b2-4d42-93d9-3a257bf5b252\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814020,\"provider\":\"twilio-flex\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814021,\"provider\":\"xant\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814022,\"provider\":\"apollo\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814023,\"provider\":\"groove\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814024,\"provider\":\"twilio-video\",\"team\":\"jiminny\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {\"import_id\":814025,\"provider\":\"hubspot\",\"team\":\"hubspot\"} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:45] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"activity:sync\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"f8416440-8f09-45c1-980f-561711587fed\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {\"userId\":\"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9\",\"account\":null} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"salesforce\",\"crm_owner\":3,\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"salesforce\",\"team_id\":1} {\"correlation_id\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {\"import_id\":814020,\"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\":\"0d77142f-be6a-499f-97b2-266c5eaa1c33\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {\"import_id\":814021,\"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\":\"b7b65216-5cec-4637-9cad-d1970e6bf7dd\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {\"import_id\":814022,\"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\":\"65154ccb-256a-46b0-9dee-28d72aa16db3\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:48] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:fail-stalled\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cc81d6f2-9267-47a1-9bd7-7781aacf40a0\",\"trace_id\":\"423e6c60-7242-4e7f-928f-fc53947d21c5\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {\"import_id\":814023,\"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\":\"4d8efa80-8850-4cac-98d4-818673ed8183\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1173,\"provider\":\"salesforce\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {\"import_id\":814024,\"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\":\"6a9207c9-faa4-4202-a0d7-4c13581fe19e\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"refreshToken\":\"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:bullhorn:ping\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"3627b377-c5b8-4514-9918-927704c4e190\",\"trace_id\":\"f7914b2b-33a8-4e3e-be2c-6e53881985fd\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":1499,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":89,\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {\"socialAccountId\":408,\"provider\":\"hubspot\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {\"socialAccountId\":408,\"provider\":\"hubspot\",\"refreshToken\":\"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {\"socialAccountId\":408,\"provider\":\"hubspot\",\"state\":\"connected\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {\"from\":\"2026-05-27 12:14:00\",\"to\":\"2026-05-27 12:30:00\"} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"nudges:send\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"e1819002-e0cb-4881-ad41-47e2b91d07ea\",\"trace_id\":\"183bc49b-1199-40c5-9b21-e2ffd0d848d0\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {\"import_id\":814025,\"provider\":\"hubspot\",\"provider_id\":31,\"team\":\"hubspot\",\"team_id\":2,\"memory_usage\":26853880,\"memory_real_usage\":65011712,\"pid\":44325} {\"correlation_id\":\"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee\",\"trace_id\":\"c1f7b514-d865-42ef-9b8f-84c298e66fc2\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] starting. {\"playlists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: [Jiminny\\Component\\Playlist\\Command\\NormalizeSortCommand::handle] finished. {\"normalizedPlaylists\":[],\"deletedPlaylists\":[]} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:30:54] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"jiminny:playlists:normalize-sort\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cae4720c-9ee7-47b5-8763-15d82f8a22c3\",\"trace_id\":\"488e9d9d-248d-4976-b641-61680284903e\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"6d9426d8-ee42-43ce-8a49-f0152a8a3f70\",\"trace_id\":\"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea\"}\n[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"06d05e64-497d-4e97-aba8-190843f73650\",\"trace_id\":\"d9507b98-a9db-46be-8d96-72128627bf35\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring start {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:06] local.NOTICE: Monitoring end {\"correlation_id\":\"48752a6b-c66a-4946-8438-e95b6b694a5b\",\"trace_id\":\"e3b9355b-6295-45e4-b7f7-cb6a81413dfe\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:08] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"74da56dc-ffc4-47f8-8c1d-60547c5d33ae\",\"trace_id\":\"75bc1a4d-0f1c-48d7-8543-677718b12043\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:10] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"cf0a5cfb-4ef5-4912-b580-034328a4c8ba\",\"trace_id\":\"ce0dfb90-13d6-4d80-a69c-f540c38be765\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"crm:sync-hubspot-objects\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"4b6b51a2-83a4-4e41-8a02-c7f96af5f576\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"usage\":23760352,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {\"team\":2} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] 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.26,\"average_seconds_per_request\":0.26} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {\"team\":2,\"strategies\":\"lastModified\",\"sync_count\":0,\"total\":0,\"last_synced_id\":null,\"duration_ms\":293.43} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4\",\"provider\":\"hubspot\",\"status\":\"completed\",\"duration_ms\":481.67,\"usage\":24181608,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"041fa062-95ff-4629-8a09-19c09e64c2bf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"usage\":24159816,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b\",\"account\":null} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":130,\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":42} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2d49a54-b645-4637-a7ae-a86cfce6e8e4\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":68.56,\"usage\":24221968,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"24a14c93-f999-4328-8d3e-e76564a6ad3d\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"usage\":24182728,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 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\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":29} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"b2b115eb-93ce-4d1b-929c-173757df8fba\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":22.19,\"usage\":24245592,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Your HubSpot account has become disconnected. Please login to Jiminny to reconnect.\"} {\"correlation_id\":\"ff9b24ac-24f1-4535-b547-c1c0973fc3bd\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"usage\":24203104,\"real_usage\":65011712,\"pid\":42210} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {\"userId\":\"71e3aac5-fb66-47c5-a236-2d051ae3e319\",\"account\":null} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {\"crm_provider\":\"hubspot\",\"crm_owner\":256,\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {\"crm_provider\":\"hubspot\",\"team_id\":49} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {\"team\":\"c6b9d6b0-b48d-4832-a68c-a57d60651888\",\"provider\":\"hubspot\",\"status\":\"disconnected\",\"duration_ms\":16.24,\"usage\":24219216,\"real_usage\":65011712,\"pid\":42210,\"reason\":\"Social account for HubSpot cannot be found. Please login to Jiminny to connect.\"} {\"correlation_id\":\"f59224f4-ca1f-4ea6-9dba-78d9f4706ebf\",\"trace_id\":\"7b1341ad-7259-4b44-b8ff-e31d3e239b62\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal Polling] Getting offset from database {\"offset\":\"\",\"jiminny_team_id\":1} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:33] local.INFO: [HubSpot Journal API] Fetching latest journal entry {\"url\":\"https://api.hubapi.com/webhooks/v4/journal/latest\"} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] No data {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.WARNING: [HubSpot Journal Polling] Maximum empty results reached, stopping {\"empty_results\":5,\"max_empty_results\":5} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] 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\":222.4,\"avg_download_ms\":0.0,\"avg_transform_ms\":0.0,\"avg_process_ms\":0.0,\"peak_memory_mb\":99.88} {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:31:34] local.INFO: [HubSpot Journal Polling] Released polling lock {\"correlation_id\":\"f6411dde-b988-4b49-8999-23ba7831ddc4\",\"trace_id\":\"efa599f4-51f4-4184-a1b8-7b1970c3eea8\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"7bce23fd-e51a-4c90-b9f0-892dc4f70d35\",\"trace_id\":\"c9587ad8-f8d2-49c2-81fe-d504f6a9cd7e\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"0dd1b7bf-e3bd-46c5-a826-75de31f64206\",\"trace_id\":\"f28a9523-30b4-4545-a7a0-9deec60fa37b\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring start {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:07] local.NOTICE: Monitoring end {\"correlation_id\":\"5cd0da3b-61a6-4ebc-b688-0258f4731b38\",\"trace_id\":\"f53f893b-9bed-4878-8d75-b05ab296d908\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:11] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"942b0164-0c58-4bbe-a4d4-0f6e1f36c648\",\"trace_id\":\"9830dbdb-de5d-4116-a979-6af2bb2986a7\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"39945a88-df69-456c-acdd-96a32f116742\",\"trace_id\":\"ed11748a-71a8-4b93-b4a7-3be7fe6d2662\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Running conference:monitor:count command for activities in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: [conference:monitor:count] No activities found in (2026-05-27 12:30:00, 2026-05-27 12:32:00] {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"conference:monitor:count\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"ff0c7772-3ac1-42d7-bb76-075b6177c2b4\",\"trace_id\":\"0899410e-40ca-461a-9f17-afd6827e79f9\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] STARTING batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: [EmailSchedule] FINISHED batch create {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:19] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:create\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"b89c5b9b-0a58-4cae-8837-ca98c3636d6a\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:32:20] local.INFO: [Jiminny\\Jobs\\Mailbox\\CreateBatches] processed 1 inboxes and created 0 batches {\"userId\":null,\"batchSize\":30,\"maxBatches\":1000} {\"correlation_id\":\"2ee0ac3b-9a67-4514-ad94-0ce7b9674d6f\",\"trace_id\":\"9fbc1d14-ccd7-440a-b42a-6f1800a8f338\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {\"count\":0} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:04] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"9c9e15c6-52b2-407f-9de9-21d99a9b31d5\",\"trace_id\":\"c6124150-3120-44df-923e-2e438000e79d\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:05] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"077e4941-57a0-44ab-8d9a-77f132f0452b\",\"trace_id\":\"bc9aedd7-9725-410a-aeb4-363ca26ecafc\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring start {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:07] local.NOTICE: Monitoring end {\"correlation_id\":\"8ffe51a5-6607-47c5-9e9b-550cb14c417a\",\"trace_id\":\"c170bea4-90fd-4721-80af-e35608355b2e\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:09] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:skip-lists:refresh\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"63d741e2-690d-492f-a073-933046060c73\",\"trace_id\":\"edb605f0-52ce-4925-bc80-55b0d4479c2c\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] STARTING batch process {\"host\":\"docker_lamp_1\"} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: [EmailSchedule] FINISHED batch process {\"host\":\"docker_lamp_1\",\"processed\":0} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:12] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:process\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"15043f87-d314-4c43-8ea3-4ce9f71e0ce8\",\"trace_id\":\"99e143a0-370e-43e5-8e18-6249644da143\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}\n[2026-05-27 12:33:18] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":62.0,\"memoryPeakBeforeCommandInMb\":99.883,\"memoryPeakAfterCommandInMB\":99.883} {\"correlation_id\":\"a97ce8b8-6cea-4fba-90b9-81cb4386aee4\",\"trace_id\":\"161b35a2-f84a-484e-bcc8-f4bb93b1f83c\"}","role_description":"text entry area","is_enabled":true,"is_focused":true,"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}]...
|
8773410874267278233
|
6802101493113036205
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20915-fix-missing-head Project: faVsco.js, menu
JY-20915-fix-missing-header-text-relay, menu
Start Listening for PHP Debug Connections
TextRelayServiceTest
Run 'TextRelayServiceTest'
Debug 'TextRelayServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Code changed:
Hide
Sync Changes
Hide This Notification
1
10
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Mail;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Jiminny\Component\Queue\Constants;
use Jiminny\Jobs\Mailbox\EmailTextRelay;
use Jiminny\Models\TextRelay;
use Google\Service\Gmail as GoogleGmail;
class TextRelayService
{
public function __construct()
{
$credentials = storage_path('text-relay.json');
abort_unless(file_exists($credentials), 422);
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentials);
}
/**
* Fetch the latest messages since the last sync.
*/
public function sync(): array
{
$mailbox = config('jiminny.google_text_user');
$expectedAlias = config('jiminny.deploy_region') === 'eu' ? 'catch-all-eu' : 'catch-all';
$expectedHost = config('jiminny.google_text_host');
Log::info('[TextRelayService] Starting sync', [
'mailbox' => $mailbox,
'expected_alias' => $expectedAlias,
'expected_host' => $expectedHost,
]);
$service = $this->getService($mailbox);
$messageHistory = $this->getHistory($service);
$messageIds = [];
foreach ($messageHistory as $histories) {
$messages = $histories->messagesAdded ?? [];
foreach ($messages as $message) {
$messageId = $message->message->id;
if (! $this->isForCurrentEnvironment($service, $mailbox, $messageId, $expectedAlias, $expectedHost)) {
continue;
}
$relayedText = TextRelay::where('email_provider_id', $messageId)->first();
if ($relayedText === null) {
$relayedText = TextRelay::create([
'email_provider' => TextRelay::PROVIDER_GSUITE,
'email_provider_id' => $messageId,
'status' => TextRelay::STATUS_PROCESSING,
]);
}
$job = new EmailTextRelay($messageId, $relayedText);
$job->onQueue(Constants::QUEUE_EMAILS);
// dispatch($job);
Log::info('[TextRelayService] Successfully dispatched message', [
'message_id' => $messageId,
'text_relay_id' => $relayedText->id,
'queue' => Constants::QUEUE_EMAILS,
]);
$messageIds[] = $messageId;
}
}
Log::info('[TextRelayService] Sync completed', [
'mailbox' => $mailbox,
'messages_processed' => count($messageIds),
'message_ids' => array_slice($messageIds, 0, 10),
]);
return $messageIds;
}
public function getHistory(GoogleGmail $service): array
{
$pageToken = null;
$topic = config('jiminny.google_text_relay_topic');
$messages = [];
$historyId = \Cache::get($topic);
// If we have no history stored, WatchMailboxEvents must not have run yet :/
if ($historyId == false) {
$historyId = $this->refreshHistoryPoint($topic);
}
$params = [
'historyTypes' => 'messageAdded',
'startHistoryId' => $historyId,
];
do {
try {
if ($pageToken) {
$params['pageToken'] = $pageToken;
}
$historyResponse = $service->users_history->listUsersHistory(
config('jiminny.google_text_user'),
$params
);
$this->setHistoryPoint($topic, (int) $historyResponse->historyId);
if ($historyResponse->getHistory()) {
$messages = array_merge($messages, $historyResponse->getHistory());
$pageToken = $historyResponse->getNextPageToken();
}
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to fetch Gmail history', [
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
} while ($pageToken);
return $messages;
}
protected function setHistoryPoint(string $topic, int $historyPoint): Carbon
{
$expiresAt = now()->addDay();
\Cache::put($topic, $historyPoint, $expiresAt);
return $expiresAt;
}
public function getService(string $mailbox): GoogleGmail
{
$client = new \Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(GoogleGmail::GMAIL_MODIFY);
$client->setAccessType('offline');
$client->setSubject($mailbox);
return new GoogleGmail($client);
}
public function refreshHistoryPoint(string $topic): int
{
$mailbox = config('jiminny.google_text_user');
$service = $this->getService($mailbox);
$watchRequest = new GoogleGmail\WatchRequest();
$watchRequest->setLabelIds(['INBOX']);
$watchRequest->setLabelFilterAction('include');
$watchRequest->setTopicName($topic);
$watchResponse = $service->users->watch($mailbox, $watchRequest);
//$expiryTimestamp = $watchResponse->expiration / 1000;
$historyPoint = (int) $watchResponse->historyId;
$this->setHistoryPoint($topic, $historyPoint);
return $historyPoint;
}
private function isForCurrentEnvironment(
GoogleGmail $service,
string $mailbox,
string $messageId,
string $expectedAlias,
string $expectedHost
): bool {
try {
$message = $service->users_messages->get($mailbox, $messageId);
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $header) {
if ($header->name === 'X-Gm-Original-To') {
$matches = $this->matchesExpectedRecipient($header->value, $expectedAlias, $expectedHost);
if (! $matches) {
// Sanitize PII by removing plus-tag content for logging
$sanitizedOriginalTo = explode('+', $header->value)[0];
Log::info('[TextRelayService] Refused message', [
'message_id' => $messageId,
'original_to_sanitized' => $sanitizedOriginalTo,
]);
}
return $matches;
}
}
Log::warning('[TextRelayService] Refused message: missing X-Gm-Original-To header', [
'message_id' => $messageId,
]);
} catch (\Exception $e) {
Log::error('[TextRelayService] Failed to inspect message', [
'message_id' => $messageId,
'exception' => $e->getMessage(),
]);
\Sentry::captureException($e);
}
return false;
}
private function matchesExpectedRecipient(string $recipient, string $expectedAlias, string $expectedHost): bool
{
$parts = explode('@', $recipient, 2);
if (count($parts) !== 2 || strcasecmp($parts[1], $expectedHost) !== 0) {
return false;
}
$localBase = explode('+', $parts[0], 2)[0];
return strcasecmp($localBase, $expectedAlias) === 0;
}
}
[2026-05-27 12:30:21] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:21] local.INFO: [TextRelayService] Starting sync {"mailbox":"[EMAIL]","expected_alias":"catch-all","expected_host":"txt.staging.jiminny.com"} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: [TextRelayService] Sync completed {"mailbox":"[EMAIL]","messages_processed":0,"message_ids":[]} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:22] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:text-relay:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"683a3124-a428-42ff-a6ff-1b536ea6f86f","trace_id":"7000de07-5030-4494-93f2-d0459b6e1204"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Running pre-meeting notification command {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:23] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-notification","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"424bb6ce-aee2-4eed-87b0-ed5aed876beb","trace_id":"7f199754-5a58-4b2a-97d8-f6186d949a0b"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Running conference:monitor:start command for activities in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: [conference:monitor:start] No activities found in (2026-05-27 12:20:00, 2026-05-27 12:25:00] {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:25] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:start","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4e79a3c6-0a5e-4036-8389-64d5d7645a05","trace_id":"5dcb8a3d-1fbb-47ce-9791-0c539fc4ae61"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesEnded {"from":"12:25","to":"12:30"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: conference:monitor:end:Jiminny\Console\Commands\Activities\MonitorMeetingEndCommand::logActivitiesWithUnfinishedSession {"from":"02:20","to":"02:25"} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:27] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:monitor:end","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"14ce0656-2a75-4d02-91a5-7a078855aa04","trace_id":"36f491fa-e011-47cd-b39e-69dcf8580186"}
[2026-05-27 12:30:29] local.NOTICE: Repairing HubSpot tokens start {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:29] local.INFO: Trying to refresh HubSpot token {"account_id":59,"updated_at":"2025-10-03 09:32:05"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":59,"provider":"hubspot","refreshToken":"97b78f6e2cc49965c00c2492b602b02708b1392551e6b3f113fbaa48992af90b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: Trying to refresh HubSpot token {"account_id":306,"updated_at":"2023-11-27 09:30:03"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:30] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":306,"provider":"hubspot","refreshToken":"6fa6aa8cc641d131231acc3470f5c03cb3b07b2e580fb18f8acb3b1dbb72549b","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30: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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: Trying to refresh HubSpot token {"account_id":1372,"updated_at":"2025-10-02 14:47:06"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1372,"provider":"hubspot","refreshToken":"9aa73948c761da29dce46c177cf9aee1fde483a44169ca38723f9f0597d7a8c4","state":"full-refresh"} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] 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":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:31] local.NOTICE: Repairing HubSpot tokens end {"total":3,"fixed":0,"failed":3} {"correlation_id":"ac0ec240-01e2-41e4-a22f-aeb0a951866f","trace_id":"ffca4402-51e8-4ec4-84a1-811b18f60121"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:transcription:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"afa5ad5c-62b7-408d-99cf-87aab5b6f581","trace_id":"9e8b5378-a093-49e1-989c-376d9d220091"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Command] Starting polling service {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Service starting {"memory_limit":"256M","max_execution_time":"0","initial_memory_mb":62.0} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Acquired polling lock {"expires_at":"2026-05-27T12:32:37.723196Z"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:37] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"conference:pre-meeting-reminder","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"701de09e-db6e-4a53-a3de-d162a5ee7b68","trace_id":"8536855c-4f04-4096-9597-497749ac44f9"}
[2026-05-27 12:30:37] local.INFO: [HubSpot Journal Auth] Requesting new client credentials token {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Auth] Successfully obtained new access token {"expires_in":1800,"cached_for":1500} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:38] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:41] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:reset-governor","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"147210e4-76f9-4ecd-a5ec-940a0bb14823","trace_id":"f6e91f2e-15b2-4d42-93d9-3a257bf5b252"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:43] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814020,"provider":"twilio-flex","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814021,"provider":"xant","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814022,"provider":"apollo","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814023,"provider":"groove","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814024,"provider":"twilio-video","team":"jiminny"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Dispatching activity sync job {"import_id":814025,"provider":"hubspot","team":"hubspot"} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:45] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"activity:sync","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"f8416440-8f09-45c1-980f-561711587fed","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.WARNING: [Salesforce] Account not connected for user {"userId":"cdf8b554-d951-4758-bc2b-c1b85d1cd0b9","account":null} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"salesforce","crm_owner":3,"team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"salesforce","team_id":1} {"correlation_id":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.ALERT: [SyncActivity] Failed {"import_id":814020,"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":"0d77142f-be6a-499f-97b2-266c5eaa1c33","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:46] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.ALERT: [SyncActivity] Failed {"import_id":814021,"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":"b7b65216-5cec-4637-9cad-d1970e6bf7dd","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:47] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:30:48] local.ALERT: [SyncActivity] Failed {"import_id":814022,"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":"65154ccb-256a-46b0-9dee-28d72aa16db3","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:48] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:fail-stalled","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cc81d6f2-9267-47a1-9bd7-7781aacf40a0","trace_id":"423e6c60-7242-4e7f-928f-fc53947d21c5"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.ALERT: [SyncActivity] Failed {"import_id":814023,"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":"4d8efa80-8850-4cac-98d4-818673ed8183","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:49] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1173,"provider":"salesforce"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.ALERT: [SyncActivity] Failed {"import_id":814024,"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":"6a9207c9-faa4-4202-a0d7-4c13581fe19e","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:50] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":1499,"provider":"hubspot","refreshToken":"96f94c623a404e02ebdbf07f1b75707bb6cdbf848cbf45d418baf608c41a8d86","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:bullhorn:ping","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"3627b377-c5b8-4514-9918-927704c4e190","trace_id":"f7914b2b-33a8-4e3e-be2c-6e53881985fd"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":1499,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":89,"team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Token needs refreshing {"socialAccountId":408,"provider":"hubspot"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:51] local.INFO: [SocialAccountService] Refreshing token from provider {"socialAccountId":408,"provider":"hubspot","refreshToken":"de4e47eb985578f4218833e763e31059e88b562e87e10749b3389be2328f0aa7","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Saving model {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountObserver] Access token was modified, encrypting {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SocialAccountService] Token refreshed {"socialAccountId":408,"provider":"hubspot","state":"connected"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Start {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [HubSpot] Search calls for period {"from":"2026-05-27 12:14:00","to":"2026-05-27 12:30:00"} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"nudges:send","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"e1819002-e0cb-4881-ad41-47e2b91d07ea","trace_id":"183bc49b-1199-40c5-9b21-e2ffd0d848d0"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] End {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:52] local.INFO: [SyncActivity] Memory usage {"import_id":814025,"provider":"hubspot","provider_id":31,"team":"hubspot","team_id":2,"memory_usage":26853880,"memory_real_usage":65011712,"pid":44325} {"correlation_id":"326a3e16-a2ad-4cbc-85b4-9908ce7e4cee","trace_id":"c1f7b514-d865-42ef-9b8f-84c298e66fc2"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] starting. {"playlists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: [Jiminny\Component\Playlist\Command\NormalizeSortCommand::handle] finished. {"normalizedPlaylists":[],"deletedPlaylists":[]} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:30:54] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"jiminny:playlists:normalize-sort","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cae4720c-9ee7-47b5-8763-15d82f8a22c3","trace_id":"488e9d9d-248d-4976-b641-61680284903e"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] Getting offset from database {"offset":"","jiminny_team_id":1} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal API] Fetching latest journal entry {"url":"https://api.hubapi.com/webhooks/v4/journal/latest"} {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [ScheduleBotCommand] Dispatched activities to capture {"count":0} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"meeting-bot:schedule-bot","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"6d9426d8-ee42-43ce-8a49-f0152a8a3f70","trace_id":"b73d7b61-4d9a-49fe-b6a4-67aee93c64ea"}
[2026-05-27 12:31:03] local.INFO: [HubSpot Journal Polling] No data {"correlation_id":"f6411dde-b988-4b49-8999-23ba7831ddc4","trace_id":"efa599f4-51f4-4184-a1b8-7b1970c3eea8"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:05] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"dialers:monitor-activities","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"06d05e64-497d-4e97-aba8-190843f73650","trace_id":"d9507b98-a9db-46be-8d96-72128627bf35"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring start {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:06] local.NOTICE: Monitoring end {"correlation_id":"48752a6b-c66a-4946-8438-e95b6b694a5b","trace_id":"e3b9355b-6295-45e4-b7f7-cb6a81413dfe"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:08] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:skip-lists:refresh","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"74da56dc-ffc4-47f8-8c1d-60547c5d33ae","trace_id":"75bc1a4d-0f1c-48d7-8543-677718b12043"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] STARTING batch process {"host":"docker_lamp_1"} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: [EmailSchedule] FINISHED batch process {"host":"docker_lamp_1","processed":0} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:10] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:process","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"cf0a5cfb-4ef5-4912-b580-034328a4c8ba","trace_id":"ce0dfb90-13d6-4d80-a69c-f540c38be765"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage before starting command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryPeakBeforeCommandInMb":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:12] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"crm:sync-hubspot-objects","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":62.0,"memoryPeakBeforeCommandInMb":99.883,"memoryPeakAfterCommandInMB":99.883} {"correlation_id":"4b6b51a2-83a4-4e41-8a02-c7f96af5f576","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SyncHubspotObjects] Starting sync {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","usage":23760352,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:13] local.INFO: [HubSpot] Syncing opportunities using strategy: lastModified {"team":2} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] 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.26,"average_seconds_per_request":0.26} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [HubSpot] Synced opportunities {"team":2,"strategies":"lastModified","sync_count":0,"total":0,"last_synced_id":null,"duration_ms":293.43} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"abae74b8-bfa8-4383-9a7f-89f4bf2bdbb4","provider":"hubspot","status":"completed","duration_ms":481.67,"usage":24181608,"real_usage":65011712,"pid":42210} {"correlation_id":"041fa062-95ff-4629-8a09-19c09e64c2bf","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","usage":24159816,"real_usage":65011712,"pid":42210} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.WARNING: [HubSpot] Account not connected for user {"userId":"2ac0447f-3c8c-4ce0-baeb-b63ddb76fa9b","account":null} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_owner":130,"team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team members found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] No team member found with active crm connection {"crm_provider":"hubspot","team_id":42} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Sync finished {"team":"b2d49a54-b645-4637-a7ae-a86cfce6e8e4","provider":"hubspot","status":"disconnected","duration_ms":68.56,"usage":24221968,"real_usage":65011712,"pid":42210,"reason":"Social account for HubSpot cannot be found. Please login to Jiminny to connect."} {"correlation_id":"24a14c93-f999-4328-8d3e-e76564a6ad3d","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [SyncHubspotObjects] Starting sync {"team":"b2b115eb-93ce-4d1b-929c-173757df8fba","usage":24182728,"real_usage":65011712,"pid":42210} {"correlation_id":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 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":"ff9b24ac-24f1-4535-b547-c1c0973fc3bd","trace_id":"7b1341ad-7259-4b44-b8ff-e31d3e239b62"}
[2026-05-27 12:31:14] local.INFO: [CrmOwnerResolver] Integration owner is not connected, attempting team members {"crm_provider":"hubspot","crm_own...
|
78477
|
NULL
|
NULL
|
NULL
|
|
78478
|
2753
|
56
|
2026-05-27T12:34:04.109333+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885244109_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.0,"top":0.0,"width":0.22986111,"height":0.037777778},"on_screen":false,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.017777778},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05277778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.068055555,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.028472222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07361111,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.47","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rainbow Brackets","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07847222,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2562980033345017998
|
-623035028936326977
|
click
|
accessibility
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78477
|
2754
|
46
|
2026-05-27T12:34:03.517107+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885243517_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.27027926,"top":1.0,"width":0.1100399,"height":0.0},"on_screen":false,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015292553,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015957447,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01861702,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025265958,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013297873,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016954787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.045877658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.032579787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013630319,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.030585106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03523936,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013297873,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.030585106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016954787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015625,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.47","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rainbow Brackets","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03756649,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.58","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zhihao Zhang","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.023603724,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Material Theme UI","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.037898935,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"18.4M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015292553,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.94","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Atom Material Themes & Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05418883,"height":0.0},"on_screen":false,"help_text":"Atom Material Themes & Plugins","role_description":"text"},{"role":"AXStaticText","text":"Php Inspections (EA Extended)","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05817819,"height":0.0},"on_screen":false,"help_text":"Php Inspections (EA Extended)","role_description":"text"}]...
|
3506845717449584116
|
-623597154257892171
|
click
|
accessibility
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78476
|
2753
|
55
|
2026-05-27T12:34:03.209263+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885243209_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M
2.93
261.22158.354
JetBrains s.r.o.
Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant
Install
Enabled
33M
2.69
Alibaba Cloud
Dart
Install
Enabled...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.0,"top":0.0,"width":0.22986111,"height":0.037777778},"on_screen":false,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.017777778},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05277778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.068055555,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.028472222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07361111,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.47","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rainbow Brackets","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07847222,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.58","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zhihao Zhang","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.049305554,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Material Theme UI","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"18.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.94","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Atom Material Themes & Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.11319444,"height":0.015555556},"on_screen":false,"help_text":"Atom Material Themes & Plugins","role_description":"text"},{"role":"AXStaticText","text":"Php Inspections (EA Extended)","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"Php Inspections (EA Extended)","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.89","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EA Inspections Team","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07569444,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cloud (IaC) Security","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"40.2K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.78","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dmitrii Protsenko","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.061805554,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"New and Updated","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07777778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Hex Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"22.6K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.030555556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.41","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"meanmail.dev","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.013194445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04027778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeGPT AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09652778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.39","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodePilot","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Metal Analyzer","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06527778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"228","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"eugenebokhan","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FastORM Builder","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.072916664,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.013888889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gianpy","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NextTask TODO Task Manager","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"NextTask TODO Task Manager","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"57K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.05","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"markbakosss","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.047222223,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX Customer Service Deploy","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"FLUX Customer Service Deploy","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"624","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.019444445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Hexana","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7.1K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.04","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KASM Language","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.072222225,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"66","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.019444445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kryptikk","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.029166667,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Top Downloads","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Copilot - Your AI Pair Programmer","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.15069444,"height":0.018888889},"on_screen":false,"help_text":"GitHub Copilot - Your AI Pair Programmer","role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"45.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.29","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1.7.1-243","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kotlin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.16","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Subversion","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.049305554,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"35.1M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.93","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"261.22158.354","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"33M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.69","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Alibaba Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dart","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.01875,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7744180002389330814
|
-646115156683636300
|
click
|
accessibility
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M
2.93
261.22158.354
JetBrains s.r.o.
Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant
Install
Enabled
33M
2.69
Alibaba Cloud
Dart
Install
Enabled...
|
78474
|
NULL
|
NULL
|
NULL
|
|
78475
|
2754
|
45
|
2026-05-27T12:34:02.611565+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885242611_m2.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"bounds":{"left":0.50166225,"top":0.04868316,"width":0.077792555,"height":0.027134877},"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.27027926,"top":1.0,"width":0.1100399,"height":0.0},"on_screen":false,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.024268618,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015292553,"height":0.0},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015957447,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021941489,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01861702,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025265958,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013297873,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016954787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.020944148,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.045877658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.032579787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013630319,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.030585106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03523936,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013297873,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.009973404,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.030585106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.016954787,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015625,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.47","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rainbow Brackets","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03756649,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.58","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zhihao Zhang","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.023603724,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Material Theme UI","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.037898935,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"18.4M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015292553,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.94","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Atom Material Themes & Plugins","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05418883,"height":0.0},"on_screen":false,"help_text":"Atom Material Themes & Plugins","role_description":"text"},{"role":"AXStaticText","text":"Php Inspections (EA Extended)","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05817819,"height":0.0},"on_screen":false,"help_text":"Php Inspections (EA Extended)","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1.7M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.89","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EA Inspections Team","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.036236703,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cloud (IaC) Security","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"40.2K","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.014960106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.78","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dmitrii Protsenko","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.029587766,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"New and Updated","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03723404,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01861702,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Hex Editor","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.021609042,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"22.6K","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01462766,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.41","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"meanmail.dev","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.023936171,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.023936171,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.0063164895,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.019281914,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeGPT AI Assistant","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.046210106,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11K","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.010305851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.39","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodePilot","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Metal Analyzer","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.03125,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"228","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011303191,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"eugenebokhan","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FastORM Builder","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.034906916,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.0066489363,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gianpy","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NextTask TODO Task Manager","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05817819,"height":0.0},"on_screen":false,"help_text":"NextTask TODO Task Manager","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"57K","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011303191,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.05","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"markbakosss","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.022606382,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX Customer Service Deploy","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.05817819,"height":0.0},"on_screen":false,"help_text":"FLUX Customer Service Deploy","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"624","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011303191,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00930851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Hexana","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015957447,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7.1K","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.04","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012632979,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KASM Language","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.034574468,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"66","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.00930851,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kryptikk","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.013962766,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Top Downloads","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.031914894,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01861702,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.045877658,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.01662234,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Copilot - Your AI Pair Programmer","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.072140954,"height":0.0},"on_screen":false,"help_text":"GitHub Copilot - Your AI Pair Programmer","role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"45.7M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015625,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.29","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1.7.1-243","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.015957447,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kotlin","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025930852,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.012300532,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.16","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.025598405,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Subversion","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.023603724,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.011968086,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"35.1M","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.014960106,"height":0.0},"on_screen":false,"role_description":"text"}]...
|
6623888841256046063
|
-718172750587346507
|
visual_change
|
accessibility
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M...
|
78472
|
NULL
|
NULL
|
NULL
|
|
78474
|
2753
|
54
|
2026-05-27T12:34:01.688683+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885241688_m1.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First
Latest
Latest
Latest
Recommended
Recommended
View More Events
View More Events
Copy as
Copy as
ID: 130a7802
an hour ago
JSON
JSON
Highlights
Highlights
Stack Trace
Stack Trace
Trace
Trace
Tags
Tags
Context
Context
php
8.5.5
Linux
6.1.164-196.303.amzn2023.aarch64
893902
893902
production
Collapse Highlights Section
Highlights
Edit
Edit
handled
yes
level
error
transaction
--...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alerts Moved","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alerts","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moved","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View Project Details","depth":8,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP-1FX9","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ask Seer","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Seer","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give Feedback","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View events","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events (total)","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users (90d)","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Level: Error","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Services/Mail/InboxService.php in Jiminny\\Services\\Mail\\InboxService::processEmailActivity","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Resolve","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolve","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More resolve options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Archive","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archive","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Archive options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Subscribe","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More Actions","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue priority","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"High","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue assignee","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Unassigned","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"production, production-eu","depth":8,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"production, production-eu","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Since First Seen (4 days)","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Since First Seen (","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 days","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close sidebar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Toggle graph series - Events","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle graph series - Users","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"release 57% 893416","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"release","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"57%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"893416","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"environment 100% production","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"environment","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"production","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"os 100% Linux 6.1.164-196.303.amzn2023.aarch64","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"os","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux 6.1.164-196.303.amzn2023.aarch64","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"handled 100% yes","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"handled","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yes","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all tags","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all tags","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Select issue content","depth":8,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Previous Event","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Next Event","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"First","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"First","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"First","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Latest","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Latest","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Latest","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Recommended","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Recommended","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View More Events","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View More Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy as","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Copy as","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ID: 130a7802","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"an hour ago","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JSON","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JSON","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Highlights","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Highlights","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stack Trace","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stack Trace","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trace","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Trace","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Tags","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tags","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Context","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Context","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"php","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.5.5","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.1.164-196.303.amzn2023.aarch64","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"893902","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"893902","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"production","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Highlights Section","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Highlights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handled","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yes","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"level","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"error","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"transaction","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4547957227595771610
|
-5161302188150629738
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First
Latest
Latest
Latest
Recommended
Recommended
View More Events
View More Events
Copy as
Copy as
ID: 130a7802
an hour ago
JSON
JSON
Highlights
Highlights
Stack Trace
Stack Trace
Trace
Trace
Tags
Tags
Context
Context
php
8.5.5
Linux
6.1.164-196.303.amzn2023.aarch64
893902
893902
production
Collapse Highlights Section
Highlights
Edit
Edit
handled
yes
level
error
transaction
--...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78473
|
2753
|
53
|
2026-05-27T12:34:00.364075+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885240364_m1.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
1887300850828448729
|
-553015309903988066
|
click
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure...
|
78471
|
NULL
|
NULL
|
NULL
|
|
78472
|
2754
|
44
|
2026-05-27T12:34:00.260306+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885240260_m2.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.038065158,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.039893616,"top":0.0518755,"width":0.037898935,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.13288109,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"bounds":{"left":0.0028257978,"top":0.15642458,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"bounds":{"left":0.015957447,"top":0.16759777,"width":0.07762633,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.18914606,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.20031923,"width":0.059674203,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"bounds":{"left":0.0028257978,"top":0.22186752,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"bounds":{"left":0.015957447,"top":0.2330407,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"bounds":{"left":0.0028257978,"top":0.254589,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"bounds":{"left":0.015957447,"top":0.26576218,"width":0.03939495,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"bounds":{"left":0.0028257978,"top":0.28731045,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"bounds":{"left":0.015957447,"top":0.29848364,"width":0.038896278,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"bounds":{"left":0.0028257978,"top":0.3200319,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"bounds":{"left":0.015957447,"top":0.3312051,"width":0.04055851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.3527534,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.3639266,"width":0.13813165,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.38547486,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.39664805,"width":0.14378324,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.41819632,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.4293695,"width":0.13696809,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"bounds":{"left":0.0,"top":0.4509178,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.46209097,"width":0.12799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"bounds":{"left":0.0028257978,"top":0.4888268,"width":0.020279255,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"bounds":{"left":0.0028257978,"top":0.5123703,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"bounds":{"left":0.015957447,"top":0.5235435,"width":0.38879654,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0028257978,"top":0.5450918,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015957447,"top":0.55626494,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"bounds":{"left":0.0028257978,"top":0.57781327,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"bounds":{"left":0.015957447,"top":0.58898646,"width":0.1278258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.6105347,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.6217079,"width":0.14245346,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.6432562,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.6544294,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"bounds":{"left":0.0,"top":0.67597765,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"bounds":{"left":0.013297873,"top":0.68715084,"width":0.042220745,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.7086991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.7198723,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"bounds":{"left":0.0,"top":0.74142057,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"bounds":{"left":0.013297873,"top":0.75259376,"width":0.030917553,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.7741421,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.7853152,"width":0.24301861,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.7813248,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.80686355,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"bounds":{"left":0.013297873,"top":0.81803674,"width":0.13248006,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.84118116,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"bounds":{"left":0.09823803,"top":0.10694334,"width":0.047539894,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"bounds":{"left":0.1022274,"top":0.10853951,"width":0.017121011,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"bounds":{"left":0.12084442,"top":0.10853951,"width":0.013796543,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.057347074,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"bounds":{"left":0.111369684,"top":0.0,"width":0.24734043,"height":0.01915403},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.15109707,"height":0.020351157},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.019448139,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.24318483,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"bounds":{"left":0.124667555,"top":0.03431764,"width":0.08976064,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"bounds":{"left":0.1377992,"top":0.06304868,"width":0.020113032,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"bounds":{"left":0.16107048,"top":0.06464485,"width":0.008976064,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.17204122,"top":0.06304868,"width":0.0056515955,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"bounds":{"left":0.1796875,"top":0.06464485,"width":0.0029920214,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"bounds":{"left":0.1377992,"top":0.09177973,"width":0.040392287,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"bounds":{"left":0.18151596,"top":0.0933759,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.19547872,"top":0.09177973,"width":0.005485372,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"bounds":{"left":0.20295878,"top":0.0933759,"width":0.008976064,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.21392952,"top":0.09177973,"width":0.0056515955,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"bounds":{"left":0.2215758,"top":0.0933759,"width":0.0029920214,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"bounds":{"left":0.124667555,"top":0.12051077,"width":0.029587766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"bounds":{"left":0.15425532,"top":0.12051077,"width":0.01861702,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"bounds":{"left":0.17287233,"top":0.12051077,"width":0.04504654,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"bounds":{"left":0.124667555,"top":0.14924182,"width":0.025930852,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"bounds":{"left":0.1505984,"top":0.14924182,"width":0.032413565,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"bounds":{"left":0.18301196,"top":0.14924182,"width":0.035904255,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"bounds":{"left":0.124667555,"top":0.17797287,"width":0.026595745,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"bounds":{"left":0.1512633,"top":0.17797287,"width":0.019448139,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.17071144,"top":0.17797287,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"bounds":{"left":0.124667555,"top":0.20670392,"width":0.013297873,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.13796543,"top":0.20670392,"width":0.015458777,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"bounds":{"left":0.1534242,"top":0.20670392,"width":0.024268618,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"bounds":{"left":0.17769282,"top":0.20670392,"width":0.028424202,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"bounds":{"left":0.20611702,"top":0.20670392,"width":0.032081116,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"bounds":{"left":0.111369684,"top":0.2386273,"width":0.23803191,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"bounds":{"left":0.17486702,"top":0.25937748,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"bounds":{"left":0.1888298,"top":0.25778133,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"bounds":{"left":0.19331782,"top":0.25937748,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"bounds":{"left":0.21027261,"top":0.25778133,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"bounds":{"left":0.22539894,"top":0.25937748,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"bounds":{"left":0.24235372,"top":0.25778133,"width":0.013464096,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"bounds":{"left":0.111369684,"top":0.2897047,"width":0.2252327,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"bounds":{"left":0.111369684,"top":0.2897047,"width":0.24734043,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"bounds":{"left":0.20412233,"top":0.30885875,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"bounds":{"left":0.111369684,"top":0.35873902,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"bounds":{"left":0.111369684,"top":0.35834,"width":0.11951463,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"bounds":{"left":0.111369684,"top":0.38547486,"width":0.20046543,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"bounds":{"left":0.3118351,"top":0.38547486,"width":0.03523936,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"bounds":{"left":0.111369684,"top":0.38547486,"width":0.24202128,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"bounds":{"left":0.124667555,"top":0.4365523,"width":0.01512633,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"bounds":{"left":0.13979389,"top":0.4365523,"width":0.08377659,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.22357048,"top":0.4365523,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"bounds":{"left":0.124667555,"top":0.46528333,"width":0.026595745,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"bounds":{"left":0.1512633,"top":0.46528333,"width":0.03507314,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.18633644,"top":0.46528333,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"bounds":{"left":0.124667555,"top":0.49401435,"width":0.013297873,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.13796543,"top":0.49401435,"width":0.015458777,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"bounds":{"left":0.1534242,"top":0.49401435,"width":0.029753989,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"bounds":{"left":0.124667555,"top":0.52274543,"width":0.18351063,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"bounds":{"left":0.124667555,"top":0.52274543,"width":0.21991356,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"bounds":{"left":0.14594415,"top":0.54189944,"width":0.19065824,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"bounds":{"left":0.12666224,"top":0.56264967,"width":0.029920213,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"bounds":{"left":0.15857713,"top":0.56105345,"width":0.028756648,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"bounds":{"left":0.18932846,"top":0.56264967,"width":0.032912236,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"bounds":{"left":0.22423537,"top":0.56105345,"width":0.012466756,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"bounds":{"left":0.111369684,"top":0.6109338,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"bounds":{"left":0.111369684,"top":0.6105347,"width":0.08577128,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"bounds":{"left":0.111369684,"top":0.63766956,"width":0.24168883,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"bounds":{"left":0.124667555,"top":0.688747,"width":0.01512633,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"bounds":{"left":0.13979389,"top":0.688747,"width":0.07330452,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.2130984,"top":0.688747,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"bounds":{"left":0.124667555,"top":0.71747804,"width":0.11818484,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"bounds":{"left":0.24484707,"top":0.71907425,"width":0.029920213,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"bounds":{"left":0.27676198,"top":0.71747804,"width":0.0076462766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"bounds":{"left":0.2864029,"top":0.71907425,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"bounds":{"left":0.3003657,"top":0.71747804,"width":0.0031582448,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"bounds":{"left":0.124667555,"top":0.7462091,"width":0.011303191,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"bounds":{"left":0.13796543,"top":0.74780524,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"bounds":{"left":0.1549202,"top":0.7462091,"width":0.10920878,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"bounds":{"left":0.124667555,"top":0.7462091,"width":0.22273937,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"bounds":{"left":0.1087101,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"bounds":{"left":0.124667555,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"bounds":{"left":0.140625,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"bounds":{"left":0.15658244,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"bounds":{"left":0.17253989,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"bounds":{"left":0.18849733,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"bounds":{"left":0.14527926,"top":0.86632085,"width":0.17154256,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"bounds":{"left":0.14594415,"top":0.86751795,"width":0.028756648,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"bounds":{"left":0.12932181,"top":0.8599362,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"bounds":{"left":0.32613033,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"bounds":{"left":0.32613033,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"bounds":{"left":0.3961104,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.390625,"top":0.09736632,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"bounds":{"left":0.3962766,"top":0.13048683,"width":0.010305851,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.390625,"top":0.14804469,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"bounds":{"left":0.39544547,"top":0.1811652,"width":0.011968086,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"bounds":{"left":0.390625,"top":0.19872306,"width":0.021609042,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"bounds":{"left":0.39178857,"top":0.23184358,"width":0.019281914,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"bounds":{"left":0.390625,"top":0.2490024,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"bounds":{"left":0.39444813,"top":0.2821229,"width":0.013962766,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"bounds":{"left":0.390625,"top":0.29968077,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"bounds":{"left":0.39461437,"top":0.33280128,"width":0.013630319,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"bounds":{"left":0.3961104,"top":0.88667196,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"bounds":{"left":0.3961104,"top":0.9114126,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.3961104,"top":0.93615323,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.3961104,"top":0.9680766,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.35272607,"top":0.066640064,"width":0.014461436,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"bounds":{"left":0.39827126,"top":0.061452515,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"bounds":{"left":0.3494016,"top":0.10055866,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"bounds":{"left":0.3537234,"top":0.10734238,"width":0.010638298,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"bounds":{"left":0.3494016,"top":0.14046289,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"bounds":{"left":0.3537234,"top":0.14724661,"width":0.03673537,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"bounds":{"left":0.3494016,"top":0.16759777,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"bounds":{"left":0.3537234,"top":0.17438148,"width":0.037898935,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"bounds":{"left":0.3494016,"top":0.19473264,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"bounds":{"left":0.3537234,"top":0.20151636,"width":0.019946808,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"bounds":{"left":0.3494016,"top":0.22186752,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"bounds":{"left":0.3537234,"top":0.22865124,"width":0.032081116,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"bounds":{"left":0.3494016,"top":0.26177174,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"bounds":{"left":0.35339096,"top":0.26855546,"width":0.016289894,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"bounds":{"left":0.3494016,"top":0.28731045,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"bounds":{"left":0.3537234,"top":0.29409418,"width":0.028922873,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"bounds":{"left":0.3494016,"top":0.3272147,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"bounds":{"left":0.3537234,"top":0.3339984,"width":0.019281914,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"bounds":{"left":0.35339096,"top":0.3735036,"width":0.021941489,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
1887300850828448729
|
-553015309903988066
|
click
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78471
|
2753
|
52
|
2026-05-27T12:33:58.527793+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885238527_m1.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alerts Moved","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alerts","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moved","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View Project Details","depth":8,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP-1FX9","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ask Seer","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Seer","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give Feedback","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View events","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events (total)","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users (90d)","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Level: Error","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Services/Mail/InboxService.php in Jiminny\\Services\\Mail\\InboxService::processEmailActivity","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Resolve","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolve","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More resolve options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Archive","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archive","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Archive options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Subscribe","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More Actions","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue priority","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"High","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue assignee","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Unassigned","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"production, production-eu","depth":8,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"production, production-eu","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Since First Seen (4 days)","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Since First Seen (","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 days","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close sidebar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Toggle graph series - Events","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle graph series - Users","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5901245720222658969
|
-4877575411626280298
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
78470
|
2754
|
43
|
2026-05-27T12:33:55.695117+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885235695_m2.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.038065158,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.039893616,"top":0.0518755,"width":0.037898935,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"bounds":{"left":0.0028257978,"top":0.13288109,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"bounds":{"left":0.0028257978,"top":0.15642458,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"bounds":{"left":0.015957447,"top":0.16759777,"width":0.07762633,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.18914606,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.20031923,"width":0.059674203,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"bounds":{"left":0.0028257978,"top":0.22186752,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"bounds":{"left":0.015957447,"top":0.2330407,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"bounds":{"left":0.0028257978,"top":0.254589,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"bounds":{"left":0.015957447,"top":0.26576218,"width":0.03939495,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"bounds":{"left":0.0028257978,"top":0.28731045,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"bounds":{"left":0.015957447,"top":0.29848364,"width":0.038896278,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"bounds":{"left":0.0028257978,"top":0.3200319,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"bounds":{"left":0.015957447,"top":0.3312051,"width":0.04055851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.3527534,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.3639266,"width":0.13813165,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.38547486,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.39664805,"width":0.14378324,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"bounds":{"left":0.0028257978,"top":0.41819632,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"bounds":{"left":0.015957447,"top":0.4293695,"width":0.13696809,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"bounds":{"left":0.0,"top":0.4509178,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.46209097,"width":0.12799202,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"bounds":{"left":0.0028257978,"top":0.4888268,"width":0.020279255,"height":0.01915403},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"bounds":{"left":0.0028257978,"top":0.5123703,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"bounds":{"left":0.015957447,"top":0.5235435,"width":0.38879654,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0028257978,"top":0.5450918,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.015957447,"top":0.55626494,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"bounds":{"left":0.0028257978,"top":0.57781327,"width":0.07679521,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"bounds":{"left":0.015957447,"top":0.58898646,"width":0.1278258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.6105347,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.6217079,"width":0.14245346,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.6432562,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.6544294,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"bounds":{"left":0.0,"top":0.67597765,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"bounds":{"left":0.013297873,"top":0.68715084,"width":0.042220745,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.7086991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.7198723,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"bounds":{"left":0.0,"top":0.74142057,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"bounds":{"left":0.013297873,"top":0.75259376,"width":0.030917553,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.7741421,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.7853152,"width":0.24301861,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.7813248,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.80686355,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"bounds":{"left":0.013297873,"top":0.81803674,"width":0.13248006,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.84118116,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"bounds":{"left":0.09823803,"top":0.10694334,"width":0.047539894,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"bounds":{"left":0.1022274,"top":0.10853951,"width":0.017121011,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"bounds":{"left":0.12084442,"top":0.10853951,"width":0.013796543,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.057347074,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"bounds":{"left":0.111369684,"top":0.0,"width":0.24734043,"height":0.01915403},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.15109707,"height":0.020351157},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.019448139,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"bounds":{"left":0.111369684,"top":0.0,"width":0.24318483,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"bounds":{"left":0.124667555,"top":0.03431764,"width":0.08976064,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"bounds":{"left":0.1377992,"top":0.06304868,"width":0.020113032,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"bounds":{"left":0.16107048,"top":0.06464485,"width":0.008976064,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.17204122,"top":0.06304868,"width":0.0056515955,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"bounds":{"left":0.1796875,"top":0.06464485,"width":0.0029920214,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"bounds":{"left":0.1377992,"top":0.09177973,"width":0.040392287,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"bounds":{"left":0.18151596,"top":0.0933759,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.19547872,"top":0.09177973,"width":0.005485372,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"bounds":{"left":0.20295878,"top":0.0933759,"width":0.008976064,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"bounds":{"left":0.21392952,"top":0.09177973,"width":0.0056515955,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"bounds":{"left":0.2215758,"top":0.0933759,"width":0.0029920214,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"bounds":{"left":0.124667555,"top":0.12051077,"width":0.029587766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"bounds":{"left":0.15425532,"top":0.12051077,"width":0.01861702,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"bounds":{"left":0.17287233,"top":0.12051077,"width":0.04504654,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"bounds":{"left":0.124667555,"top":0.14924182,"width":0.025930852,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"bounds":{"left":0.1505984,"top":0.14924182,"width":0.032413565,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"bounds":{"left":0.18301196,"top":0.14924182,"width":0.035904255,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"bounds":{"left":0.124667555,"top":0.17797287,"width":0.026595745,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"bounds":{"left":0.1512633,"top":0.17797287,"width":0.019448139,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.17071144,"top":0.17797287,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"bounds":{"left":0.124667555,"top":0.20670392,"width":0.013297873,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.13796543,"top":0.20670392,"width":0.015458777,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"bounds":{"left":0.1534242,"top":0.20670392,"width":0.024268618,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"bounds":{"left":0.17769282,"top":0.20670392,"width":0.028424202,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"bounds":{"left":0.20611702,"top":0.20670392,"width":0.032081116,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"bounds":{"left":0.111369684,"top":0.2386273,"width":0.23803191,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"bounds":{"left":0.17486702,"top":0.25937748,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"bounds":{"left":0.1888298,"top":0.25778133,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"bounds":{"left":0.19331782,"top":0.25937748,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"bounds":{"left":0.21027261,"top":0.25778133,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"bounds":{"left":0.22539894,"top":0.25937748,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"bounds":{"left":0.24235372,"top":0.25778133,"width":0.013464096,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"bounds":{"left":0.111369684,"top":0.2897047,"width":0.2252327,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"bounds":{"left":0.111369684,"top":0.2897047,"width":0.24734043,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"bounds":{"left":0.20412233,"top":0.30885875,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"bounds":{"left":0.111369684,"top":0.35873902,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"bounds":{"left":0.111369684,"top":0.35834,"width":0.11951463,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"bounds":{"left":0.111369684,"top":0.38547486,"width":0.20046543,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"bounds":{"left":0.3118351,"top":0.38547486,"width":0.03523936,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"bounds":{"left":0.111369684,"top":0.38547486,"width":0.24202128,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"bounds":{"left":0.124667555,"top":0.4365523,"width":0.01512633,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"bounds":{"left":0.13979389,"top":0.4365523,"width":0.08377659,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.22357048,"top":0.4365523,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"bounds":{"left":0.124667555,"top":0.46528333,"width":0.026595745,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"bounds":{"left":0.1512633,"top":0.46528333,"width":0.03507314,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.18633644,"top":0.46528333,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"bounds":{"left":0.124667555,"top":0.49401435,"width":0.013297873,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.13796543,"top":0.49401435,"width":0.015458777,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"bounds":{"left":0.1534242,"top":0.49401435,"width":0.029753989,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"bounds":{"left":0.124667555,"top":0.52274543,"width":0.18351063,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"bounds":{"left":0.124667555,"top":0.52274543,"width":0.21991356,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"bounds":{"left":0.14594415,"top":0.54189944,"width":0.19065824,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"bounds":{"left":0.12666224,"top":0.56264967,"width":0.029920213,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"bounds":{"left":0.15857713,"top":0.56105345,"width":0.028756648,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"bounds":{"left":0.18932846,"top":0.56264967,"width":0.032912236,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"bounds":{"left":0.22423537,"top":0.56105345,"width":0.012466756,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"bounds":{"left":0.111369684,"top":0.6109338,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"bounds":{"left":0.111369684,"top":0.6105347,"width":0.08577128,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"bounds":{"left":0.111369684,"top":0.63766956,"width":0.24168883,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"bounds":{"left":0.124667555,"top":0.688747,"width":0.01512633,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"bounds":{"left":0.13979389,"top":0.688747,"width":0.07330452,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"bounds":{"left":0.2130984,"top":0.688747,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"bounds":{"left":0.124667555,"top":0.71747804,"width":0.11818484,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"bounds":{"left":0.24484707,"top":0.71907425,"width":0.029920213,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"bounds":{"left":0.27676198,"top":0.71747804,"width":0.0076462766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"bounds":{"left":0.2864029,"top":0.71907425,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"bounds":{"left":0.3003657,"top":0.71747804,"width":0.0031582448,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"bounds":{"left":0.124667555,"top":0.7462091,"width":0.011303191,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"bounds":{"left":0.13796543,"top":0.74780524,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"bounds":{"left":0.1549202,"top":0.7462091,"width":0.10920878,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"bounds":{"left":0.124667555,"top":0.7462091,"width":0.22273937,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"bounds":{"left":0.1087101,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"bounds":{"left":0.124667555,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"bounds":{"left":0.140625,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"bounds":{"left":0.15658244,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"bounds":{"left":0.17253989,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"bounds":{"left":0.18849733,"top":0.79768556,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"bounds":{"left":0.14527926,"top":0.86632085,"width":0.17154256,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"bounds":{"left":0.14594415,"top":0.86751795,"width":0.028756648,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"bounds":{"left":0.12932181,"top":0.8599362,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"bounds":{"left":0.32613033,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"bounds":{"left":0.32613033,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"bounds":{"left":0.3961104,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.390625,"top":0.09736632,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"bounds":{"left":0.3962766,"top":0.13048683,"width":0.010305851,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.390625,"top":0.14804469,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"bounds":{"left":0.39544547,"top":0.1811652,"width":0.011968086,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"bounds":{"left":0.390625,"top":0.19872306,"width":0.021609042,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"bounds":{"left":0.39178857,"top":0.23184358,"width":0.019281914,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"bounds":{"left":0.390625,"top":0.2490024,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"bounds":{"left":0.39444813,"top":0.2821229,"width":0.013962766,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"bounds":{"left":0.390625,"top":0.29968077,"width":0.021609042,"height":0.050678372},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"bounds":{"left":0.39461437,"top":0.33280128,"width":0.013630319,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"bounds":{"left":0.3961104,"top":0.88667196,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"bounds":{"left":0.3961104,"top":0.9114126,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.3961104,"top":0.93615323,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.3961104,"top":0.9680766,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.35272607,"top":0.066640064,"width":0.014461436,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"bounds":{"left":0.39827126,"top":0.061452515,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"bounds":{"left":0.3494016,"top":0.10055866,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"bounds":{"left":0.3537234,"top":0.10734238,"width":0.010638298,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"bounds":{"left":0.3494016,"top":0.14046289,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"bounds":{"left":0.3537234,"top":0.14724661,"width":0.03673537,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"bounds":{"left":0.3494016,"top":0.16759777,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"bounds":{"left":0.3537234,"top":0.17438148,"width":0.037898935,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"bounds":{"left":0.3494016,"top":0.19473264,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"bounds":{"left":0.3537234,"top":0.20151636,"width":0.019946808,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"bounds":{"left":0.3494016,"top":0.22186752,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"bounds":{"left":0.3537234,"top":0.22865124,"width":0.032081116,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"bounds":{"left":0.3494016,"top":0.26177174,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"bounds":{"left":0.35339096,"top":0.26855546,"width":0.016289894,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"bounds":{"left":0.3494016,"top":0.28731045,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"bounds":{"left":0.3537234,"top":0.29409418,"width":0.028922873,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"bounds":{"left":0.3494016,"top":0.3272147,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"bounds":{"left":0.3537234,"top":0.3339984,"width":0.019281914,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"bounds":{"left":0.35339096,"top":0.3735036,"width":0.021941489,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alerts Moved","depth":10,"bounds":{"left":0.3494016,"top":0.39225858,"width":0.058843084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alerts","depth":12,"bounds":{"left":0.3537234,"top":0.3990423,"width":0.012799202,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moved","depth":12,"bounds":{"left":0.39012632,"top":0.39984038,"width":0.012466756,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.4192154,"top":0.06464485,"width":0.013796543,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"bounds":{"left":0.4192154,"top":0.066640064,"width":0.013796543,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View Project Details","depth":8,"bounds":{"left":0.4396609,"top":0.06624102,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP-1FX9","depth":11,"bounds":{"left":0.4476396,"top":0.066640064,"width":0.02144282,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ask Seer","depth":5,"bounds":{"left":0.9350067,"top":0.059856344,"width":0.04720745,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Seer","depth":8,"bounds":{"left":0.94630986,"top":0.0650439,"width":0.019614361,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.97423536,"top":0.065442935,"width":0.0021609042,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give Feedback","depth":6,"bounds":{"left":0.98420876,"top":0.059856344,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":8,"bounds":{"left":0.4192154,"top":0.10295291,"width":0.16439494,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View events","depth":8,"bounds":{"left":0.9411569,"top":0.10654429,"width":0.026097074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events (total)","depth":9,"bounds":{"left":0.9411569,"top":0.10654429,"width":0.026097074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users (90d)","depth":8,"bounds":{"left":0.97257316,"top":0.10654429,"width":0.022273935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Level: Error","depth":10,"bounds":{"left":0.41888297,"top":0.12490024,"width":0.02443484,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed","depth":9,"bounds":{"left":0.42220744,"top":0.12490024,"width":0.15458776,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":8,"bounds":{"left":0.95927525,"top":0.12210695,"width":0.007978723,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":8,"bounds":{"left":0.9906915,"top":0.12210695,"width":0.004155585,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New","depth":9,"bounds":{"left":0.4192154,"top":0.14046289,"width":0.009474734,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Services/Mail/InboxService.php in Jiminny\\Services\\Mail\\InboxService::processEmailActivity","depth":8,"bounds":{"left":0.43550533,"top":0.14046289,"width":0.21509309,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Resolve","depth":7,"bounds":{"left":0.4192154,"top":0.16719872,"width":0.02543218,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolve","depth":9,"bounds":{"left":0.42320478,"top":0.17238627,"width":0.017453458,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More resolve options","depth":7,"bounds":{"left":0.44431517,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Archive","depth":7,"bounds":{"left":0.45628324,"top":0.16719872,"width":0.025265958,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archive","depth":9,"bounds":{"left":0.4602726,"top":0.17238627,"width":0.017287234,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Archive options","depth":7,"bounds":{"left":0.48121676,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Subscribe","depth":7,"bounds":{"left":0.49318483,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share","depth":7,"bounds":{"left":0.50515294,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More Actions","depth":7,"bounds":{"left":0.517121,"top":0.16719872,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority","depth":7,"bounds":{"left":0.90076464,"top":0.17398244,"width":0.015957447,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue priority","depth":7,"bounds":{"left":0.91805184,"top":0.17039107,"width":0.013962766,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"High","depth":12,"bounds":{"left":0.9250333,"top":0.18076617,"width":0.00880984,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":7,"bounds":{"left":0.93733376,"top":0.17398244,"width":0.019780586,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue assignee","depth":8,"bounds":{"left":0.9584442,"top":0.16999201,"width":0.036402926,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Unassigned","depth":11,"bounds":{"left":0.96675533,"top":0.17398244,"width":0.021775266,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"production, production-eu","depth":8,"bounds":{"left":0.4192154,"top":0.20949721,"width":0.07363697,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"production, production-eu","depth":12,"bounds":{"left":0.42320478,"top":0.21628092,"width":0.059674203,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Since First Seen (4 days)","depth":8,"bounds":{"left":0.49251994,"top":0.20949721,"width":0.069148935,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Since First Seen (","depth":12,"bounds":{"left":0.4965093,"top":0.21628092,"width":0.0390625,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 days","depth":12,"bounds":{"left":0.5355718,"top":0.21628092,"width":0.014461436,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":12,"bounds":{"left":0.5500333,"top":0.21628092,"width":0.0016622341,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Add a search term","depth":11,"bounds":{"left":0.5749667,"top":0.21428572,"width":0.2995346,"height":0.01915403},"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXComboBox","text":"Add a search term","depth":11,"bounds":{"left":0.5749667,"top":0.21428572,"width":0.2995346,"height":0.01915403},"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close sidebar","depth":8,"bounds":{"left":0.8828125,"top":0.20949721,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Toggle graph series - Events","depth":7,"bounds":{"left":0.42353722,"top":0.25818038,"width":0.021276595,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events","depth":10,"bounds":{"left":0.4275266,"top":0.26256984,"width":0.013297873,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":10,"bounds":{"left":0.43085107,"top":0.27693537,"width":0.0066489363,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle graph series - Users","depth":7,"bounds":{"left":0.42353722,"top":0.2980846,"width":0.021276595,"height":0.035115723},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users","depth":10,"bounds":{"left":0.42869017,"top":0.3008779,"width":0.010970744,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"bounds":{"left":0.4323471,"top":0.31524342,"width":0.0034906915,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"release 57% 893416","depth":7,"bounds":{"left":0.767121,"top":0.25818038,"width":0.11702128,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"release","depth":9,"bounds":{"left":0.7691157,"top":0.25977653,"width":0.013962766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"57%","depth":9,"bounds":{"left":0.8334442,"top":0.25977653,"width":0.007978723,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"893416","depth":9,"bounds":{"left":0.84275264,"top":0.25977653,"width":0.013796543,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"environment 100% production","depth":7,"bounds":{"left":0.767121,"top":0.2725459,"width":0.11702128,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"environment","depth":9,"bounds":{"left":0.7691157,"top":0.273743,"width":0.024767287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"bounds":{"left":0.83111703,"top":0.273743,"width":0.010305851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"production","depth":9,"bounds":{"left":0.84275264,"top":0.273743,"width":0.02044548,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"os 100% Linux 6.1.164-196.303.amzn2023.aarch64","depth":7,"bounds":{"left":0.767121,"top":0.2869114,"width":0.11702128,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"os","depth":9,"bounds":{"left":0.7691157,"top":0.28810853,"width":0.004488032,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"bounds":{"left":0.83111703,"top":0.28810853,"width":0.010305851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux 6.1.164-196.303.amzn2023.aarch64","depth":9,"bounds":{"left":0.84275264,"top":0.28810853,"width":0.07712766,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"handled 100% yes","depth":7,"bounds":{"left":0.767121,"top":0.3008779,"width":0.11702128,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"handled","depth":9,"bounds":{"left":0.7691157,"top":0.30247405,"width":0.015458777,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"bounds":{"left":0.83111703,"top":0.30247405,"width":0.010305851,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yes","depth":9,"bounds":{"left":0.84275264,"top":0.30247405,"width":0.006482713,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all tags","depth":7,"bounds":{"left":0.7691157,"top":0.31763768,"width":0.027094414,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all tags","depth":8,"bounds":{"left":0.7691157,"top":0.31923383,"width":0.027094414,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Select issue content","depth":8,"bounds":{"left":0.4192154,"top":0.34836394,"width":0.028922873,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Events","depth":10,"bounds":{"left":0.42320478,"top":0.35434955,"width":0.01761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Previous Event","depth":8,"bounds":{"left":0.7252327,"top":0.3499601,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Next Event","depth":8,"bounds":{"left":0.73454124,"top":0.3499601,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"First","depth":9,"bounds":{"left":0.74617684,"top":0.3499601,"width":0.013630319,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"First","depth":10,"bounds":{"left":0.74617684,"top":0.3507582,"width":0.013630319,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"First","depth":12,"bounds":{"left":0.74883646,"top":0.3567438,"width":0.00831117,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8168202218501311056
|
-5163553987964306794
|
click
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First...
|
78463
|
NULL
|
NULL
|
NULL
|
|
78469
|
2753
|
51
|
2026-05-27T12:33:55.417486+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885235417_m1.jpg...
|
Firefox
|
Jiminny\Exceptions\EmailActivityImportException: [ Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app — Work...
|
1
|
jiminny.sentry.io/issues/7502251930/?environment=p jiminny.sentry.io/issues/7502251930/?environment=production&environment=production-eu&project=82419&query=is%3Aunresolved&referrer=issue-stream...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First
Latest
Latest
Latest
Recommended
Recommended
View More Events
View More Events
Copy as
Copy as
ID: 130a7802
an hour ago
JSON
JSON
Highlights
Highlights
Stack Trace
Stack Trace
Trace
Trace
Tags
Tags
Context
Context
php
8.5.5
Linux
6.1.164-196.303.amzn2023.aarch64
893902
893902
production
Collapse Highlights Section
Highlights
Edit
Edit
handled
yes
level
error
transaction
--
url
--
Trace: Trace ID
43c32395ff734a069abfa45614d4adfd
43c32395ff734a069abfa45614d4adfd
Collapse Stack Trace Section
Stack Trace
Display options
Display
Copy as
Copy as
There are 3 chained exceptions in this event.
Jiminny\Exceptions\EmailActivityImportException
Jiminny\Exceptions\EmailActivityImportException
Jiminny\Exceptions\EmailActivityImportException
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
mechanism
generic
handled
true
code
401
/app/Services/Mail/InboxService.php
:491
in
Jiminny\Services\Mail\InboxService::processEmailActivity
Copy file path
Open this line in GitHub
In App...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unnamed Group","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-19958] Upgrade BE libraries - May - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"jiminny/app/backend-code - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app/backend-code - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6104","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6104","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-6722","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-6722","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2026-7261","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2026-7261","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"NVD - cve-2025-14179","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NVD - cve-2025-14179","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20613] Allow owner's role to be selected when setting up a trial - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Text relay","depth":4,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXRadioButton","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: Jiminny\\Services\\Mail\\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik - Time Off","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik - Time Off","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Login | Salesforce","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Login | Salesforce","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Text message from 087 787 8118 - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open mode picker, currently 3.1 Pro","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.1 Pro","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":7,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show the uploaded image in a lightbox","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to make log file colorful","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to make log file colorful","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":12,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"laravel.log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file). By default, JetBrains IDEs treat","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".log","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"files as plain text, which is why they lack syntax highlighting.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is how to set it up:","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":15,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 1: Use the \"Ideolog\" Plugin (Recommended)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open your IDE Settings/Preferences:","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"macOS:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Windows/Linux:","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ctrl","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Alt","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"S","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Navigate to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Plugins","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the left sidebar.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Select the","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tab at the top.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ideolog","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restart IDE","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if prompted.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"INFO","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ERROR","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEBUG","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tags.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Note: If the colors don't apply automatically, you can customize the log patterns by going to","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > Log Highlighting (Ideolog)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Method 2: Use the \"Grep Console\" Plugin","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method 2: Use the \"Grep Console\" Plugin","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you also want to colorize the live output in your terminal or run/debug consoles,","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is another highly popular option.","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Go to","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Plugins > Marketplace","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search for","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Click","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and restart.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once installed, you can right-click inside your log file or console and select","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grep Console Settings","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to define specific colors for specific keywords (e.g., make any line containing","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.INFO","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"green, and","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"local.ERROR","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"red).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Quick Built-in Fix (No Plugins)","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quick Built-in Fix (No Plugins)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings > Editor > File Types","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find a format that has highlighting you like (e.g.,","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Properties","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"YAML","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*.log","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to the \"File name patterns\" list for that type.","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Warning: This applies that syntax globally to all log files).","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":14,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":13,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to main content","depth":3,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":4,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle organization menu","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboards","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dashboards","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitors","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Monitors","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Business","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"What's New","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Help","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"lukas.kovalik@jiminny.com","depth":5,"bounds":{"left":0.26284721,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Issues","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Feed","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Errors & Outages","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Errors & Outages","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Breached Metrics","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Breached Metrics","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Warnings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Warnings","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"User Feedback","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"User Feedback","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Autofix","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Autofix","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Recently Run","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recently Run","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All Views","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All Views","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Configure","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Alerts Moved","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Alerts","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moved","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View Project Details","depth":8,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"APP-1FX9","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ask Seer","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Seer","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give Feedback","depth":6,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View events","depth":8,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events (total)","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Users (90d)","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Level: Error","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Services/Mail/InboxService.php in Jiminny\\Services\\Mail\\InboxService::processEmailActivity","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Resolve","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolve","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More resolve options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Archive","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archive","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Archive options","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Subscribe","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More Actions","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Priority","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue priority","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"High","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Modify issue assignee","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Unassigned","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"production, production-eu","depth":8,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"production, production-eu","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Since First Seen (4 days)","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Since First Seen (","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4 days","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXComboBox","text":"Add a search term","depth":11,"on_screen":true,"help_text":"","placeholder":"Filter events…","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close sidebar","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Toggle graph series - Events","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"65","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle graph series - Users","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"release 57% 893416","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"release","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"57%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"893416","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"environment 100% production","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"environment","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"production","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"os 100% Linux 6.1.164-196.303.amzn2023.aarch64","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"os","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux 6.1.164-196.303.amzn2023.aarch64","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"handled 100% yes","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"handled","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yes","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all tags","depth":7,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View all tags","depth":8,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Select issue content","depth":8,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Previous Event","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Next Event","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"First","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"First","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"First","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Latest","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Latest","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Latest","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Recommended","depth":9,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Recommended","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"View More Events","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View More Events","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy as","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Copy as","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ID: 130a7802","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"an hour ago","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JSON","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JSON","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Highlights","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Highlights","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stack Trace","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stack Trace","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Trace","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Trace","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Tags","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tags","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Context","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Context","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"php","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8.5.5","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linux","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.1.164-196.303.amzn2023.aarch64","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"893902","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"893902","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"production","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Highlights Section","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Highlights","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handled","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"yes","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"level","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"error","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"transaction","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"url","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"--","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Trace: Trace ID","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"43c32395ff734a069abfa45614d4adfd","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"43c32395ff734a069abfa45614d4adfd","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Stack Trace Section","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Stack Trace","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Display options","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Display","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy as","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Copy as","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"There are 3 chained exceptions in this event.","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXHeading","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":12,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\EmailActivityImportException","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mechanism","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"generic","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"handled","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"code","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"401","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/app/Services/Mail/InboxService.php","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":491","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny\\Services\\Mail\\InboxService::processEmailActivity","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file path","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open this line in GitHub","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"In App","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6957215848789401031
|
-5164679614071059818
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 5 Q2 - Platform Team - Scrum Board Platform Sprint 5 Q2 - Platform Team - Scrum Board - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
Pipelines - jiminny/app
Pipelines - jiminny/app
Unnamed Group
[JY-19958] Upgrade BE libraries - May - Jira
[JY-19958] Upgrade BE libraries - May - Jira
jiminny/app/backend-code - Vanta
jiminny/app/backend-code - Vanta
NVD - cve-2026-6104
NVD - cve-2026-6104
NVD - cve-2026-6722
NVD - cve-2026-6722
NVD - cve-2026-7261
NVD - cve-2026-7261
NVD - cve-2025-14179
NVD - cve-2025-14179
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
High vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Medium vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
Low vulnerabilities identified in packages are addressed (GitHub Repo) - Vanta
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
[JY-20613] Allow owner's role to be selected when setting up a trial - Jira
Text relay
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
TypeError: Jiminny\Services\Mail\TextRelayService::setHistoryPoint(): Argument #2 ($historyPoint) must be of type int, string given, called in /home/jiminny/app/Services/Mail/TextRelayService.php on line 118 — jiminny — app
CloudWatch | us-east-2
CloudWatch | us-east-2
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20915 fix strict casting by LakyLak · Pull Request #12134 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
JY-20963 fix deleted object import by LakyLak · Pull Request #12121 · jiminny/app
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Lukas Kovalik - Time Off
Lukas Kovalik - Time Off
Jiminny
Jiminny
Login | Salesforce
Login | Salesforce
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Jiminny\Exceptions\EmailActivityImportException: [Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed — jiminny — app
Close tab
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
Text message from 087 787 8118 - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
Open mode picker, currently 3.1 Pro
Gemini
3.1 Pro
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Show the uploaded image in a lightbox
You said how to make log file colorful
You said
how to make log file colorful
Copy prompt
Edit
Gemini said
Gemini said
Based on your screenshot, you are using a JetBrains IDE (like PhpStorm, given the
laravel.log
file). By default, JetBrains IDEs treat
.log
files as plain text, which is why they lack syntax highlighting.
To make your log files colorful and much easier to read, the best approach is to install a dedicated log-highlighting plugin.
Here is how to set it up:
Method 1: Use the "Ideolog" Plugin (Recommended)
Method 1: Use the "Ideolog" Plugin (Recommended)
Ideolog
is the officially supported JetBrains plugin for log files. It automatically highlights log levels (INFO, WARNING, ERROR) and allows you to click on stack traces.
Open your IDE Settings/Preferences:
macOS:
Cmd
+
,
Windows/Linux:
Ctrl
+
Alt
+
S
Navigate to
Plugins
in the left sidebar.
Select the
Marketplace
tab at the top.
Search for
Ideolog
.
Click
Install
and then
Restart IDE
if prompted.
Once installed, Ideolog will automatically recognize standard timestamped logs (like your Laravel logs) and color-code the
INFO
,
ERROR
, and
DEBUG
tags.
Note: If the colors don't apply automatically, you can customize the log patterns by going to
Settings > Editor > Log Highlighting (Ideolog)
.
Method 2: Use the "Grep Console" Plugin
Method 2: Use the "Grep Console" Plugin
If you also want to colorize the live output in your terminal or run/debug consoles,
Grep Console
is another highly popular option.
Go to
Settings > Plugins > Marketplace
.
Search for
Grep Console
.
Click
Install
and restart.
Once installed, you can right-click inside your log file or console and select
Grep Console Settings
to define specific colors for specific keywords (e.g., make any line containing
local.INFO
green, and
local.ERROR
red).
Quick Built-in Fix (No Plugins)
Quick Built-in Fix (No Plugins)
If you don't want to install plugins, you can force the IDE to read the log as a different file type with basic highlighting, though it won't be as effective:
Open
Settings > Editor > File Types
.
Find a format that has highlighting you like (e.g.,
Properties
or
YAML
).
Add
*.log
to the "File name patterns" list for that type.
(Warning: This applies that syntax globally to all log files).
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to main content
Skip to main content
Toggle organization menu
Issues
Issues
Explore
Explore
Dashboards
Dashboards
Monitors
Monitors
Settings
Settings
Try Business
What's New
Help
[EMAIL]
Issues
Expand
Feed
Feed
Errors & Outages
Errors & Outages
Breached Metrics
Breached Metrics
Warnings
Warnings
User Feedback
User Feedback
Autofix
Autofix
Recently Run
Recently Run
All Views
All Views
Configure
Alerts Moved
Alerts
Moved
Issues
Issues
View Project Details
APP-1FX9
Ask Seer
Ask Seer
/
Give Feedback
Jiminny\Exceptions\EmailActivityImportException
View events
Events (total)
Users (90d)
Level: Error
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
65
0
New
/app/Services/Mail/InboxService.php in Jiminny\Services\Mail\InboxService::processEmailActivity
Resolve
Resolve
More resolve options
Archive
Archive
Archive options
Subscribe
Share
More Actions
Priority
Modify issue priority
High
Assignee
Modify issue assignee
Unassigned
production, production-eu
production, production-eu
Since First Seen (4 days)
Since First Seen (
4 days
)
Add a search term
Add a search term
Close sidebar
Toggle graph series - Events
Events
65
Toggle graph series - Users
Users
0
release 57% 893416
release
57%
893416
environment 100% production
environment
100%
production
os 100% Linux 6.1.164-196.303.amzn2023.aarch64
os
100%
Linux 6.1.164-196.303.amzn2023.aarch64
handled 100% yes
handled
100%
yes
View all tags
View all tags
Select issue content
Events
Previous Event
Next Event
First
First
First
Latest
Latest
Latest
Recommended
Recommended
View More Events
View More Events
Copy as
Copy as
ID: 130a7802
an hour ago
JSON
JSON
Highlights
Highlights
Stack Trace
Stack Trace
Trace
Trace
Tags
Tags
Context
Context
php
8.5.5
Linux
6.1.164-196.303.amzn2023.aarch64
893902
893902
production
Collapse Highlights Section
Highlights
Edit
Edit
handled
yes
level
error
transaction
--
url
--
Trace: Trace ID
43c32395ff734a069abfa45614d4adfd
43c32395ff734a069abfa45614d4adfd
Collapse Stack Trace Section
Stack Trace
Display options
Display
Copy as
Copy as
There are 3 chained exceptions in this event.
Jiminny\Exceptions\EmailActivityImportException
Jiminny\Exceptions\EmailActivityImportException
Jiminny\Exceptions\EmailActivityImportException
[Email Import] Failed for InboxEmail ID: 125695762: Error: Request failed
mechanism
generic
handled
true
code
401
/app/Services/Mail/InboxService.php
:491
in
Jiminny\Services\Mail\InboxService::processEmailActivity
Copy file path
Open this line in GitHub
In App...
|
78468
|
NULL
|
NULL
|
NULL
|
|
78468
|
2753
|
50
|
2026-05-27T12:33:49.313076+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-27/1779 /Users/lukas/.screenpipe/data/data/2026-05-27/1779885229313_m1.jpg...
|
PhpStorm
|
Settings
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M
2.93
261.22158.354
JetBrains s.r.o.
Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant
Install
Enabled
33M
2.69
Alibaba Cloud
Dart
Install
Enabled
27.6M
3.62
Google
JetBrains IDE Services
Install
Enabled
27.4M
4.62
JetBrains s.r.o.
Docker
Installed
Enabled
26.4M
3.55
261.22158.299
JetBrains s.r.o.
GitHub
Installed
Enabled
24.6M
3.66
261.22158.283
JetBrains s.r.o.
Top Rated
Show all
Gerry Themes Pro
Paid...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":true,"help_text":"⌘F","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search plugins","depth":1,"bounds":{"left":0.0,"top":0.0,"width":0.22986111,"height":0.037777778},"on_screen":false,"help_text":"Type / to see options","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Suggested","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kubernetes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.050694443,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.017777778},"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Staff Picks","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045833334,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05277778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.71","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13.1.2.261","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Laravel Idea","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04375,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Symfony Plugin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.068055555,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.028472222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.64","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PHP Annotations","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07361111,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"5.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027777778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.80","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12.1.0","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.020833334,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Daniel Espendiller","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06388889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IdeaVim","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.035416666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"20.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.47","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rainbow Brackets","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07847222,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.58","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zhihao Zhang","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.049305554,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Material Theme UI","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"18.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.94","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Atom Material Themes & Plugins","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.11319444,"height":0.015555556},"on_screen":false,"help_text":"Atom Material Themes & Plugins","role_description":"text"},{"role":"AXStaticText","text":"Php Inspections (EA Extended)","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"Php Inspections (EA Extended)","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.89","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"EA Inspections Team","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07569444,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Cloud (IaC) Security","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"40.2K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.78","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dmitrii Protsenko","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.061805554,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"New and Updated","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.07777778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Hex Editor","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.045138888,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"22.6K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.030555556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.41","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"meanmail.dev","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.013194445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeAgent","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.04027778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodeGPT AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09652778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"11K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.021527778,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.39","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CodePilot","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Metal Analyzer","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06527778,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"228","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"eugenebokhan","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FastORM Builder","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.072916664,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.013888889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Gianpy","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"NextTask TODO Task Manager","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"NextTask TODO Task Manager","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"57K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.05","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"markbakosss","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.047222223,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX Customer Service Deploy","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"FLUX Customer Service Deploy","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"624","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.023611112,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FLUX","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.019444445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Hexana","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7.1K","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.04","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"KASM Language","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.072222225,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"66","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.019444445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kryptikk","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.029166667,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Top Downloads","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.06666667,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"JetBrains AI Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09583333,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"151.9M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.034722224,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.15","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.024305556,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Copilot - Your AI Pair Programmer","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.15069444,"height":0.018888889},"on_screen":false,"help_text":"GitHub Copilot - Your AI Pair Programmer","role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"45.7M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.29","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1.7.1-243","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.033333335,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Kotlin","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.16","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Subversion","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.049305554,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"35.1M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.93","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"261.22158.354","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.121527776,"height":0.018888889},"on_screen":false,"help_text":"Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant","role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"33M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"2.69","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Alibaba Cloud","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Dart","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.01875,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"27.6M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.031944446,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.62","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Google","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains IDE Services","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.09791667,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Install","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.054166667,"height":0.037777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"27.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4.62","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Docker","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03125,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"26.4M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.55","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025694445,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"261.22158.299","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GitHub","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.030555556,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Installed","depth":4,"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Enabled","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.025,"height":0.028888889},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"24.6M","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03263889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"3.66","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.02638889,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"261.22158.283","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"JetBrains s.r.o.","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.05347222,"height":0.015555556},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Top Rated","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.044444446,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show all","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.03888889,"height":0.018888889},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Gerry Themes Pro","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.079166666,"height":0.018888889},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Paid","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.027083334,"height":0.017777778},"on_screen":false,"help_text":"Activate the plugin license after installation or use the 30-day trial.","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3545669146978946913
|
-646115155541737035
|
visual_change
|
accessibility
|
NULL
|
Search
Search plugins
Suggested
Kubernetes
Cloud
I Search
Search plugins
Suggested
Kubernetes
Cloud
Install
Enabled
JetBrains
Staff Picks
Show all
Laravel Idea
Installed
Enabled
2.9M
4.71
13.1.2.261
Laravel Idea
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
Symfony Plugin
Install
Enabled
8.4M
4.64
Daniel Espendiller
PHP Annotations
Installed
Enabled
5.7M
4.80
12.1.0
Daniel Espendiller
IdeaVim
Install
Enabled
20.9M
4.47
JetBrains s.r.o.
Rainbow Brackets
Install
Enabled
24M
4.58
Zhihao Zhang
Material Theme UI
Install
Enabled
18.4M
3.94
Atom Material Themes & Plugins
Php Inspections (EA Extended)
Install
Enabled
1.7M
4.89
EA Inspections Team
Cloud (IaC) Security
Install
Enabled
40.2K
4.78
Dmitrii Protsenko
New and Updated
Show all
Hex Editor
Install
Enabled
22.6K
4.41
meanmail.dev
CodeAgent
Install
Enabled
1
CodeAgent
CodeGPT AI Assistant
Install
Enabled
11K
4.39
CodePilot
Metal Analyzer
Install
Enabled
228
eugenebokhan
FastORM Builder
Install
Enabled
7
Gianpy
NextTask TODO Task Manager
Install
Enabled
57K
4.05
markbakosss
FLUX Customer Service Deploy
Install
Enabled
624
FLUX
Hexana
Install
Enabled
7.1K
4.04
JetBrains s.r.o.
KASM Language
Install
Enabled
66
Kryptikk
Top Downloads
Show all
JetBrains AI Assistant
Install
Enabled
151.9M
2.15
JetBrains s.r.o.
GitHub Copilot - Your AI Pair Programmer
Installed
Enabled
45.7M
2.29
1.7.1-243
GitHub
Kotlin
Install
Enabled
37M
4.16
JetBrains s.r.o.
Subversion
Installed
Enabled
35.1M
2.93
261.22158.354
JetBrains s.r.o.
Qoder CN (Formerly Lingma) - Alibaba Cloud AI Coding Assistant
Install
Enabled
33M
2.69
Alibaba Cloud
Dart
Install
Enabled
27.6M
3.62
Google
JetBrains IDE Services
Install
Enabled
27.4M
4.62
JetBrains s.r.o.
Docker
Installed
Enabled
26.4M
3.55
261.22158.299
JetBrains s.r.o.
GitHub
Installed
Enabled
24.6M
3.66
261.22158.283
JetBrains s.r.o.
Top Rated
Show all
Gerry Themes Pro
Paid...
|
NULL
|
NULL
|
NULL
|
NULL
|